メインコンテンツへスキップ
見出し画像

ラズパイで始めるローカル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 #ヘッドレス #セキュリティ

     
     
    生成AIの感動を共有したいYaroTechです✨ 常識より実験。正解より行動。 生成AI時代を、先に試す傾奇者。 📝 470日間継続投稿中| 🎉 フォロワー1900名突破!🤝 質問大歓迎!みんなで「AIと共に羽ばたく」コミュニティを作りましょう🚀

    あなたへのおすすめ