PR

Raspberry PiにSSH接続する方法|公開鍵認証の設定・接続できない時の対処・VS Code連携【初心者向け】

RaspberryPi

Raspberry Pi 環境構築

スポンサーリンク

はじめに

Raspberry Pi(ラズパイ)を触っていて煩わしいのが、「モニター・キーボードの繋ぎ直し」と「ファイルの受け渡し」です。使うたびに周辺機器を接続し、PCで書いたプログラムをUSBメモリで移す……。この手間を解消し、「メインPCから直接ラズパイを操作したい」を叶えるのが SSH接続です。

SSH(Secure Shell)は、ネットワーク経由で安全にリモート操作するための仕組みです。この記事では、Windows から Raspberry Pi へ 公開鍵認証で SSH 接続する手順を、つまずきやすいポイントと合わせて解説します。

この記事で分かること

  • Windows の PowerShell で SSH 鍵ペアを作る手順(ssh-keygen -t ed25519
  • Raspberry Pi Imager の OS カスタマイズで、SSH 有効化+公開鍵を登録する方法
  • PowerShell から ssh -i 鍵名 ユーザー名@ホスト名.local で接続する手順
  • 接続できない時の対処.local が引けない/プライバシーセパレーター/authorized_keys の手動作成)
  • VS Code の「Remote – SSH」でラズパイを開発環境にする方法

スポンサーリンク

事前準備:Windows で SSH 鍵ペアを作成する

まず、接続に使う「鍵」を Windows の PowerShell で作ります。鍵は秘密鍵(PC に置く)公開鍵(ラズパイに登録する)のペアです。順番に進めていきましょう。

PowerShellを開いて cd ~ でユーザーディレクトリに移動している画面

PowerShell を開き、作業するユーザーディレクトリに移動します。

cd ~
PowerShellで ls を実行し .ssh フォルダの有無を確認、無ければ mkdir .ssh でフォルダを作成する画面

ls と入力してディレクトリ内を表示させます。「.ssh」フォルダが無ければ下記コマンドで作成します。

ls mkdir .ssh # .ssh フォルダが無い場合だけ実行
PowerShellで cd .ssh を実行して .ssh フォルダに移動している画面

「.ssh」フォルダに移動します。

cd .ssh
PowerShellで ssh-keygen -t ed25519 -C

以下のコマンドを実行します。-f の後は好きな鍵名で構いません。※この記事では ninjinpyvbalab で進めます

ssh-keygen -t ed25519 -C “” -f ninjinpyvbalab
ssh-keygen 実行後にパスフレーズの入力を2回求められている画面

パスフレーズの入力:2回聞かれます。入力しても画面には何も表示されませんが、しっかり入力して Enter を押してください。

パスフレーズは忘れないようにメモしましょう(このあとの SSH 接続や VS Code 接続でも使います)。

PowerShellで ls を実行し .ssh フォルダ内に秘密鍵と公開鍵(.pub)の2ファイルが生成されたことを確認している画面

以下のコマンドで .ssh 内のリストを表示します。

ls

鍵名(ninjinpyvbalab)と ninjinpyvbalab.pub2つのファイルが表示されれば成功です。

cat ninjinpyvbalab.pub を実行して公開鍵の内容(ssh-ed25519 で始まる1行)を表示している画面

以下のコマンドを実行して公開鍵を確認し、メモ帳などにコピーしておきます。

cat ninjinpyvbalab.pub

注意:ここでコピーするのは .pub(公開鍵)です。ラズパイ側に「この鍵を持つ人だけ通す」という設定をするために使います。拡張子の無いファイル(秘密鍵)は絶対に外に出さないでください。


スポンサーリンク

Raspberry Pi Imager で SSH を有効にして OS を書き込む

Raspberry Pi Imager で OS を書き込むとき、OS のカスタマイズ画面で「SSH を有効にする」「公開鍵認証のみを使用する」を設定し、先ほどコピーした公開鍵を貼り付けます。

Imager のバージョンで画面の細部が異なる場合があります:スクリーンショットと項目名・ボタン位置が違っても、「機種・OS・SDカードを選ぶ → OSをカスタマイズして SSH 有効化+公開鍵を登録 → 書き込み」という流れは共通です。SSH の設定は「サービス(Services)」タブにあります。
Raspberry Pi Imagerでデバイス選択画面から Raspberry Pi 4 を選んでいる画面

使用する機種を選択します。この記事では Raspberry Pi 4 を使うので「Raspberry Pi 4」を選びます。

Raspberry Pi ImagerでOS選択画面から Raspberry Pi OS (64-bit) を選んでいる画面

「Raspberry Pi OS(64-bit)」を選択します。

Raspberry Pi Imagerで書き込み先の microSD カードを選択している画面

書き込む microSD カードを選択します。

Raspberry Pi ImagerのOSカスタマイズ画面でホスト名を入力している画面

任意のホスト名を入力します。※後で SSH 接続に使うのでメモ推奨

Raspberry Pi ImagerのOSカスタマイズ画面で「次へ」に進んでいる画面

入力できたら「次へ」進みます。

Raspberry Pi ImagerのOSカスタマイズ画面でユーザー名とパスワードを入力している画面

ユーザー名とパスワードを入力します。※SSH 接続時の「ユーザー名」になるのでメモ推奨

Raspberry Pi ImagerのOSカスタマイズ画面でWi-Fiの設定をしている画面

Wi-Fi の設定をします。※接続するネットワークは、ルーター側でデバイス間通信が禁止されていないもの(後述のトラブル対処参照)

Raspberry Pi ImagerのOSカスタマイズ画面。SSHを有効化しUse public key authenticationにチェック、BROWSEボタンで公開鍵ファイルを選択する画面

ここが今回のキモです。

  • SSH を有効化する を ON にする
  • Use public key authentication(公開鍵認証のみ)にチェック
  • BROWSE をクリックして、作成した公開鍵(ninjinpyvbalab.pub)のファイルを選択する
Raspberry Pi ImagerのOSカスタマイズ画面で公開鍵が登録されたことを確認している画面

画像のように公開鍵が登録されたら「次へ」進みます。

Raspberry Pi Imagerで設定内容を確認して次へ進む画面

設定内容を確認して「次へ」進みます。

Raspberry Pi Imagerで WRITE ボタンを押して microSD カードへ書き込みを開始する画面

WRITE(保存/書き込み)で microSD カードへ書き込みます。

Raspberry Pi Imagerの「書き込みが正常に完了しました」の画面

OS イメージの書き込みが完了しました。microSD カードをラズパイに挿して起動します。

💾 OSのインストールをもっと詳しく Raspberry PiのOSインストール完全ガイド|初心者向けにゼロから解説 Imager の使い方・OS の選び方・初回起動までを画面キャプチャ付きで解説しています。

スポンサーリンク

PowerShell から Raspberry Pi に SSH 接続する

ラズパイを起動したら、いよいよ接続です。PowerShell から順に進めます。

PowerShellで cd ~ を実行してユーザーディレクトリに移動している画面

ユーザーディレクトリに移動します。

cd ~
PowerShellで cd .ssh を実行して .ssh ディレクトリに移動している画面

.ssh ディレクトリに移動します。

cd .ssh
PowerShellで ssh -i ninjinpyvbalab でユーザー名@ホスト名.local を指定してSSH接続を実行している画面

下記コマンドで Raspberry Pi に SSH 接続します。

ssh -i ninjinpyvbalab <ユーザー名>@<ホスト名>.local

-i には秘密鍵のファイル名@ の前後は Imager で設定したユーザー名ホスト名を入れます(例:ssh -i ninjinpyvbalab pi@raspberrypi.local)。

  • 初回接続時は yes と入力
  • 鍵作成時に設定したパスフレーズを入力
SSH接続に成功して user@hostname:~ $ のプロンプトが表示された画面

ユーザー名@ホスト名:~ $ というプロンプトに変われば接続成功です!これで PC から直接ラズパイのコマンドを実行できます。


スポンサーリンク

SSH 接続できない原因と対処法

「ホスト名.local」で繋がらない

環境によっては ホスト名.local(mDNS)が解決できないことがあります。実際、Raspberry Pi 3 Model B+ で試したときは .local では接続できず、一度ディスプレイを繋いで IP アドレスを確認し、ホスト名.local を「IP アドレス」に変更することで接続できました。

また、会社のネットワークに Wi-Fi 接続していたとき、デバイス間通信がパブリック設定(禁止)になっていて、接続できず2時間ほど悩んだこともあります。ネットワーク設定には注意してください。

SSH接続できない場合のチェックリスト。ホスト名.localをIPアドレスに変える、ルーターのプライバシーセパレーターを確認
  • ホスト名.localIP アドレスに変えて試す(IP はラズパイ側で hostname -I、またはルーター管理画面で確認)
  • ルーターの設定(プライバシーセパレーター/AP アイソレーション等)で、デバイス間通信が禁止されていないか確認する
ssh -i ninjinpyvbalab pi@192.168.1.50 # ホスト名.local の代わりにIPアドレス

接続できなかった時の対処:authorized_keys を手動で作成する

Imager の設定で接続できなかった場合は、SD カードに直接設定を書き込みます。

microSDカードのbootパーティションに拡張子なしの authorized_keys ファイルを新規作成している画面

OS を書き込んだ microSD カードを PC に挿し、ルートディレクトリ(boot パーティション)に authorized_keys という名前のファイルを作成します(拡張子はつけない)。

boot パーティションの場所は OS のバージョンで変わります(Bookworm 系では /boot/firmware/)。PC からは通常「bootfs」などの名前のドライブとして見えます。

authorized_keys ファイルをメモ帳で開き公開鍵の内容を貼り付けて保存している画面

その authorized_keys ファイルをメモ帳などで開き、PC で作った公開鍵の内容cat 鍵名.pub で確認したもの)を貼り付けて保存します。

microSD カードをラズパイに戻して起動し、もう一度 SSH 接続を試してください。


スポンサーリンク

VS Code の「Remote – SSH」でラズパイを開発環境にする

毎回コマンドを打つのは面倒なので、VS Code の拡張機能「Remote – SSH」を使いましょう。PC 上のファイルを編集するのと同じ感覚で、ラズパイ上のプログラムを開発できるようになります。

VS Code公式サイトのダウンロードページ

まず VS Code 公式サイトからソフトをインストールします。

VS Codeの拡張機能パネルで Remote - SSH を検索してインストールする画面
  • VS Code を開く
  • ウィンドウ左端の「拡張機能」をクリック
  • Remote – SSH を検索して、インストール
VS Codeのリモートエクスプローラーで SSH の歯車アイコンから config ファイルを開く画面

リモートエクスプローラー」をクリック → SSH の ⚙(歯車)をクリック → C:\Users\ユーザー名\.ssh\config を選択します。

VS Codeの .ssh/config ファイルに Host・HostName・User・IdentityFile・ServerAliveInterval を記述している画面

開いた config に以下を追記します。

Host pi0324 HostName pi0324.local User raspberry IdentityFile C:\Users\ユーザー名\.ssh\ninjinpyvbalab ServerAliveInterval 60

ホスト名・ユーザー名・鍵のパスは環境に合わせて変更してください。

VS Codeのリモートエクスプローラーに設定した pi0324 が表示され、接続ボタンをクリックする画面

config を保存して更新すると、SSH の下に pi0324 が表示されます。「」ボタンをクリックして接続します。

VS Codeで初回接続時に接続先を信頼するか確認するダイアログとパスフレーズの入力欄

最初の接続時は「信頼して接続してよいか」聞かれるので YES(続行)。その後、ウィンドウ上部中央で SSH キー(パスフレーズ)を求められるので入力します。

VS Codeの左下に青く「SSH: pi0324」と表示され、ラズパイへの接続が成功した画面

SSH 接続が成功すると、ウィンドウ左下に青く「SSH: ホスト名」と表示されます。これで、PC 上のファイルを編集するのと同じ感覚で、ラズパイ上のプログラムを開発できます。

🛠️ VS Code をこれから入れる方へ 業務自動化の第一歩!VS CodeでPythonを動かすための環境構築ガイド VS Code と Python のインストール、PATH を通す設定、MAX_PATH 制限の解除まで解説しています。

スポンサーリンク

まとめと使用感(Raspberry Pi 4 Model B)

今回は Raspberry Pi 4 Model B で検証しました。3 Model B+ では接続が不安定な場面もありましたが、4 系は比較的スムーズです。ただし、VS Code 経由で Python を動かすと、メモリ消費やネットワーク負荷で接続が切れることもあります。

GUI(デスクトップ環境)を起動しているとリソースを消費するため、本格的に自動化ラボとして使うなら、デスクトップ環境なし(CUI/Lite 版)での運用も検討の余地があります。

次に読む記事

💾 OSインストールの詳解 Raspberry PiのOSインストール完全ガイド|初心者向けにゼロから解説 Imager の使い方から初回起動まで。SSH 設定の前段をもっと丁寧に知りたい方へ。 🛠️ PC側の開発環境 業務自動化の第一歩!VS CodeでPythonを動かすための環境構築ガイド VS Code + Python のインストールと PATH 設定。ラズパイ側とセットで整えるとスムーズです。 📐 SSHでラズパイ開発を活かす Raspberry PiとPythonでXYテーブルを自作する|回路設計からTkinter GUI制御まで SSH でラズパイに繋いで、実際に「動く装置」を作るシリーズ。GPIO 制御からGUIまで全工程。

スポンサーリンク

よくある質問(FAQ)

Qすでに作ってある SSH 鍵(id_ed25519 など)を使い回せますか?

Aはい。新しく作らず、既存の公開鍵(~/.ssh/id_ed25519.pub など)の内容を Imager や authorized_keys に貼り付ければ使えます。接続時は -i でその秘密鍵を指定します。

Qssh でホスト名.local が「Could not resolve hostname」になります。

AmDNS(.local 名前解決)が環境で無効なことが原因です。ラズパイ側で hostname -I を実行するかルーター管理画面で IP アドレスを調べ、ssh -i 鍵名 ユーザー名@192.168.x.x のように IP を直接指定してください。会社・公共 Wi-Fi ではプライバシーセパレーターで通信自体が遮断されていることもあります。

Q鍵作成時のパスフレーズを忘れました。

Aパスフレーズは復元できません。新しい鍵ペアを作り直し、公開鍵をラズパイ側(Imager 再書き込み、または ~/.ssh/authorized_keys の追記)に登録し直してください。

Q最近の Raspberry Pi OS には pi ユーザーが無いと聞きました。

Aはい。Bookworm 以降はデフォルトの pi ユーザーが廃止され、Imager の設定で自分でユーザー名を決める方式になりました。SSH 接続時の ユーザー名@ホスト名 は、その設定したユーザー名を使います。

Q複数の Raspberry Pi に接続する場合は?

A~/.ssh/configHost ブロックを機体ごとに追記すれば、VS Code や ssh ホスト名 で切り替えられます。鍵は共通のものを使い回して構いません。

Qデスクトップ版と Lite 版、どちらを入れるべきですか?

ASSH と VS Code だけで開発するなら、GUI の無い Lite 版が軽くておすすめです。カメラプレビューなど画面が必要な作業をする場合はデスクトップ版を選びます。後から sudo apt install で切り替えることもできます。


ニンジン🥕アイコン

Follow me on X

本ブログの中の人「ニンジン🥕」はXやってます。新着記事はいち早くポストでお知らせしているので、見逃したくない方は @ninjin_py_vba をフォローしてみてください🥕

@ninjin_py_vba をフォロー

この記事が役に立ったら、シェアしてもらえると嬉しいです🥕

Xでポスト はてブ LINE Pocket

PROJECT LOG — SERIES INDEX
スポンサーリンク

シリーズ記事一覧

電子工作・自動化ツールの製作記録をシリーズごとにまとめています。気になるテーマからお読みください。


超音波距離センサーHC-SR04をRaspberry Pi Picoで使う|仕組み・配線・精度検証
.uds1-block { position: relative; overflow: hidden; border-radius: 12px; border: 1px solid #f0cba8; background: linear-g…
今週の注目ガジェット〜09/07週〜|電子工作・自作向け新製品まとめ(TickrCast/Radxa Linkr ほか)
ニンジンのガジェット通信 09/07週。ESP32-P4の自作気象モニター、極小IP-KVM「Radxa Linkr」、ESP32のDINレール型PLC、LTE開発キットなど、電子工作で使えそうな新製品5つを解説。
サーボモータの角度をタクトスイッチで可変|OLED(SSD1306)に現在角度をリアルタイム表示
Raspberry Pi Pico 2W×MG996RにタクトスイッチとOLED(SSD1306)を追加。ボタンで角度を可変しながら現在角度をリアルタイム表示するMicroPython実装を、framebufの文字拡大やサーボの遊び対策まで実機ベースで解説します。
MG996RサーボモーターをRaspberry Pi Pico 2Wで動かす:PWM制御とキャリブレーション実践
MG996RサーボモーターをRaspberry Pi Pico 2Wで動かす方法を解説。公称180度のはずが実測198度だった個体差の原因究明から、ホーンのズレ補正、タクトスイッチでの角度制御まで実機検証の様子を紹介します。
Tapo P110Mの消費電力をExcelレポート化する【年次集計・電気代試算・セキュリティ判断編】
FastAPI+openpyxlでTapo P110Mの消費電力をExcelレポート化。15秒間隔の生ログを日次集計する設計や、31円/kWhでの電気代試算、外部公開を見送った理由まで解説します。

コメント