ラズパイで始めるローカルAI #03|パスワードなしでスッと入れる!SSH鍵認証とヘッドレス運用
こんにちは!YaroTechです。
シリーズ「ラズパイで始めるローカルAI 〜クラウドに頼らない!5台で団結するローカルLLMの冒険〜」第3回です。
前回(#02)で1台のRaspberry Pi 4にOSをインストールし、SSH接続にも成功しました。でも、毎回パスワードを入力するのは面倒ですよね。しかも、再起動するたびにIPアドレスが変わる可能性もある。
今回は「ssh raspi01」の6文字だけでパスワードなしログインできる環境を作ります。
完成すれば、モニターもキーボードも完全に不要。PCのターミナルからスッとラズパイに入れる、真のヘッドレス運用です!
💡 「ヘッドレス運用」とは?
ラズパイにモニターやキーボードを繋がず、別のPCからネットワーク経由で操作する使い方のこと。いわば「頭(画面)がない(レス)」状態です。ラズパイ本体は電源さえ繋がっていれば、棚の上に置きっぱなしでOK。自分の普段使いのPCからリモコン操作するイメージです。
そのリモコン操作に使うのがSSH(エスエスエイチ)という仕組み。簡単に言えば、「ネットワーク越しに安全に他のPCを操作できるトンネル」のようなものです。前回パスワードを毎回入力して接続していましたが、今回はそれをもっと便利にしていきます!
※見出し画像のプロンプトは一番下におまけで公開中!
🖥️ 実行環境
Raspberry Pi:
Raspberry Pi 4 Model B / 2GB RAM × 1台
Raspberry Pi OS Lite (64-bit) Trixie(Debian 13)
ホスト名: raspi-llm01
microSD 64GB(class10)
作業PC:
ThinkPad X1 Carbon
Windows 11 Home 25H2
RAM 32GB
PowerShell
🎯 この記事で得られること
固定IPアドレスの設定方法(再起動してもIPが変わらない)
SSH鍵認証の設定(パスワード入力が不要に)
.ssh/configでエイリアス設定(`ssh raspi01`だけで接続)
5台のクラスターを見据えたIP設計
📋 前回からの振り返り
前回(#02)で以下が完了しています。
Raspberry Pi OS Lite (64-bit) Trixie をインストール
Wi-Fi接続&SSH接続成功
箱は4GBなのに実は2GBモデルだった(Revisionコードで判明)
`apt update && apt upgrade` 完了
関連記事: ラズパイで始めるローカルAI #02|眠っていたPi 4を起こす!OS書き込みから初回起動まででは、OSセットアップの全手順を詳しく紹介しています。
今回は、このSSH接続を安定運用レベルに引き上げます。
🔧 Step 1: 固定IPアドレスの設定
まずは前回と同じようにSSHでラズパイに接続します。
ping raspi-llm01.local
ssh iotlab_llm@raspi-llm01.localなぜ固定IPが必要?
現在はルーターが自動でIPアドレスを割り振っています(DHCP)。これだと再起動のたびにIPが変わる可能性があり、5台のクラスターを組むときに管理が大変になります。
現在のネットワーク状況を確認
ip addr show wlan0私の環境では`192.168.50.144`が自動で割り振られていました。
ネットワーク上のデバイスをスキャン
固定IPを決める前に、使われているIPを確認します。
sudo apt install nmap -y
nmap -sn 192.168.50.0/24我が家のネットワークには23台のデバイスが接続されていました(SwitchBotやESPなどのIoT機器がたくさん)。200番台がほぼ空いていたので、ラズパイクラスター用に201〜205を予約することにしました。
`192.168.50.201` → raspi-llm01(今回)
`192.168.50.202` → raspi-llm02(将来)
`192.168.50.203` → raspi-llm03(将来)
`192.168.50.204` → raspi-llm04(将来)
`192.168.50.205` → raspi-llm05(将来)
Wi-Fi接続名を確認
nmcli con show接続名を確認します。私の環境では「netplan-wlan0-ASUS Zen WiFi AX6600」でした(ルーター名が入っています)。
固定IP設定を適用
sudo nmcli con mod "(接続名)" ipv4.method manual ipv4.addresses 192.168.50.201/24 ipv4.gateway 192.168.50.1 ipv4.dns "192.168.50.1,8.8.8.8"設定を反映します。
sudo nmcli con up "(接続名)"「Connection successfully activated」と表示されれば成功です!
確認
ip addr show wlan0`192.168.50.201/24` と `valid_lft forever` が表示されていればOK。`forever`は「DHCPのリース期限なし=固定IP」を意味します。
🔑 Step 2: SSH鍵認証の設定
毎回パスワードを入力するのは面倒ですし、クラスター管理時にスクリプトで一括操作するなら鍵認証は必須です。
一旦SSHから抜けて、作業PC側(X1のPowerShell)で操作します。
exit鍵ペアを生成
ssh-keygen -t ed25519 -C "raspi-llm-cluster"質問には以下のように回答します。
保存場所: そのままEnter(デフォルトでOK)
パスフレーズ: 空のままEnter × 2回
ed25519は最新の暗号方式で、RSAより短い鍵長で同等以上のセキュリティを持っています。
公開鍵をラズパイに転送
Windowsでは`ssh-copy-id`が使えないので、以下のコマンドで転送します。
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh iotlab_llm@192.168.50.201 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"パスワードを聞かれるので入力します。これが最後のパスワード入力です!
※元々のログインで設定したパスワードです。
パスワードなしでログインできるかテスト
ssh iotlab_llm@192.168.50.201パスワードを聞かれずにログインできたら成功です!
⚡ Step 3: .ssh/configでエイリアス設定
`ssh iotlab_llm@192.168.50.201`はまだ長い。これを**`ssh raspi01`だけで接続**できるようにします。
SSHから抜けて、作業PC側で設定ファイルを作成します。
exit⚠️ ここで注意!メモ帳を使ってはいけません
最初、Windowsのメモ帳(notepad)で`.ssh/config`を作成したところ、UTF-16エンコーディングで保存されてしまい、SSHが「Could not resolve hostname」エラーを出しました。
PowerShellで直接作成するのが確実です。
@"
Host raspi01
HostName 192.168.50.201
User iotlab_llm
IdentityFile ~/.ssh/id_ed25519
Host raspi02
HostName 192.168.50.202
User iotlab_llm
IdentityFile ~/.ssh/id_ed25519
Host raspi03
HostName 192.168.50.203
User iotlab_llm
IdentityFile ~/.ssh/id_ed25519
Host raspi04
HostName 192.168.50.204
User iotlab_llm
IdentityFile ~/.ssh/id_ed25519
Host raspi05
HostName 192.168.50.205
User iotlab_llm
IdentityFile ~/.ssh/id_ed25519
"@ | Out-File -FilePath $env:USERPROFILE\.ssh\config -Encoding ascii将来の5台分も先にテンプレートとして入れておきました。
最終テスト!
ssh raspi01パスワードなし、6文字だけでログイン完了!これがヘッドレス運用の完成形です。
⚠️ つまずきポイントと注意点
注意点1: Windowsのメモ帳でSSH configを作らない
メモ帳はデフォルトでUTF-16(BOM付き)で保存するため、SSHが設定ファイルを正しく読めません。PowerShellの`Out-File -Encoding ascii`、またはVSCodeなどUTF-8対応のエディタを使いましょう。
注意点2: 固定IP設定後にSSH接続が切れることがある
`nmcli con up`でIPアドレスが変わるため、SSH接続が切れることがあります。切れた場合は新しいIPアドレス(192.168.50.201)で再接続すればOKです。
注意点3: ルーターのDHCPレンジとの重複に注意
固定IPがルーターのDHCP自動割り当てレンジと重複すると、他のデバイスと衝突する可能性があります。nmap等で使用中のIPを確認してから、空いている番号帯を選びましょう。200番台は比較的安全です。
注意点4: シャットダウンは必ずコマンドで
前回も紹介しましたが、大事なことなので繰り返します。電源ケーブルをいきなり抜くのはNG。
sudo shutdown -h now緑LED消灯後に電源ケーブルを抜きましょう。
🔗 関連記事
今回の内容に関連する過去記事もぜひご覧ください:
📝 まとめ
今回はラズパイシリーズ#03として、完全ヘッドレス運用環境を構築しました。
達成したこと:
固定IP: `192.168.50.201`(再起動してもIPが変わらない)
SSH鍵認証: パスワード入力が不要に
エイリアス: `ssh raspi01` の6文字だけで接続
クラスター設計: 5台分のIP(201〜205)とconfig設定を先行準備
Before → After:
Before: `ssh iotlab_llm@raspi-llm01.local` → パスワード入力
After: `ssh raspi01` → 即ログイン!
地味ですが、この「スッと入れる」感覚が毎日の運用では大きな差になります。5台に拡張したときも同じ手順で設定するだけです。
🚀 次回予告
#04では 、いよいよ軽量LLM(Ollama)のインストールと動作確認に挑みます!
2GBのPi 4でOllamaは動くのか?
TinyLlamaやPhi-2でどこまで会話できる?
tok/s(1秒あたりのトークン生成数)の実測
2GBという厳しい制約の中、どこまでLLMが動くか。正直、結果は予測できません。成功も失敗もリアルにレポートします。お楽しみに!
🎨 おまけ:見出し画像作成プロンプト
今日の見出し画像のベースはジミー(Gemini)に下記プロンプトで作成してもらいました!:
詳細なアニメの美意識の画像を作成してください。表情豊かな瞳、なめらかな網掛けセルの色使い、はっきりした線画を使用します。アニメのシーンに典型的な身ぶりと雰囲気で、心情と登場人物の存在を強調してください。
下記条件のnote見出し画像をサイズは横長で作成してください。サイズは必ず横長で作成してください。
### デザインコンセプト
- **背景**: ダークブルー→パープルのグラデーション(セキュリティ・通信をイメージ)
- **メインビジュアル**:
- 中央にノートPCのターミナル画面を操作するキャラクター
- ターミナルに「ssh raspi01」と表示
- 鍵のアイコンが光っている
- ラズパイがワイヤレスで接続されている様子
- 「#03」の数字が大きく装飾的に配置
- **テキスト要素**:
- 上部: 「ラズパイで始めるローカルAI」(大きく・太字・白色)
- 中央: 「パスワードなしでスッと入れる!」(中サイズ・白色)
- 下部: 「#03|SSH鍵認証とヘッドレス運用」(小サイズ・白色)
- **装飾**: 鍵アイコン、Wi-Fiの電波、暗号化を示す鍵穴パターン
### 作成手順
1. スライドサイズ(1536×1024px)の横長フォーマット
2. 背景にダークブルー→パープルのグラデーションを設定
3. 中央にノートPCを操作するキャラクターを配置
4. ターミナル画面に「ssh raspi01」を表示
5. 鍵アイコンとワイヤレス接続の視覚表現を追加
6. テキストを3段構成で追加:
- 上部: 「ラズパイで始めるローカルAI」(48pt、太字、白色)
- 中央: 「パスワードなしでスッと入れる!」(36pt、白色)
- 下部: 「#03|SSH鍵認証とヘッドレス運用」(24pt、白色)
7. 下部中央寄りに「YaroTech」のロゴを12ptで控えめに配置
8. 全体のバランスを確認して完成
※シリーズ#01-#02と統一感を持たせつつ、セキュリティ・接続の安心感を表現
※「スッと入れる」快適さをビジュアルで伝える#YaroTech #AI活用 #生成AI #RaspberryPi #ラズパイ #ローカルAI #LLM #SSH #ヘッドレス #セキュリティ
いいなと思ったら応援しよう!
記事がお役に立てたなら嬉しいです!
いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。
あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨
一緒に羽ばたき続けましょう!