Raspberry Pi Zero/Zero 2 W をヘッドレスでセットアップする手順メモ
はじめに
この記事では、Raspberry Pi Zero/Zero 2 W をモニター・キーボードなしで、Wi-FiとSSHだけでセットアップする方法を、自分のつまずきポイントも含めてまとめます。
想定読者
- Raspberry Piは触ったことはあるが、毎回セットアップでつまずきがち
- モニターやキーボードを繋がずに、できるだけスマートにセットアップしたい
- 引っ越しやテザリングなどでWi-Fiが変わっても、OSを入れ直さずに対応したい
この記事で分かること
- Raspberry Pi Zero/Zero 2 Wを完全ヘッドレス(モニター/キーボード不要)でセットアップできる
- SDカードのbootにファイルを置くだけで、Wi-FiとSSHを有効化できる
- インターネット環境が変わっても、OSを作り直さずにWi-Fiを変更できる
- SSHの警告
REMOTE HOST IDENTIFICATION HAS CHANGED!の意味と、安全な対処方法が分かる
動作環境・前提条件
今回試した環境はこんな感じです。
- OS: raspios_armhf-2023-05-03(Debian Bullseyeベース)
- ハードウェア: Raspberry Pi Zero / Zero 2 W
- 作業PC: macOS(Windowsでも基本的な流れは同じ)
- ツール: Raspberry Pi Imager、nmap(オプション)
重要:対象OSバージョンについて
この手順が動くバージョン:
- raspios_armhf-2023-05-03(Bullseye系)
この手順では動かないバージョン:
- Raspberry Pi OS Bookworm(2023-10-10以降)
- Raspberry Pi OS Trixie(2025年リリース版)
なぜ新しいバージョンでは動かないのか
Bookworm以降では、ネットワーク管理の仕組みが dhcpcd + wpa_supplicant から NetworkManager ベースに変わりました。そのため、bootに置いた wpa_supplicant.conf を起動時に自動コピーする仕組みが廃止されています。
新しいバージョンでヘッドレスセットアップをする場合は、Raspberry Pi Imagerの「詳細設定」でWi-Fiを事前設定するか、NetworkManager用の .nmconnection ファイルを用意する必要があります。
前提知識
次のあたりはすでに分かっている人を想定しています。
- ターミナルで簡単なコマンドを実行できる
- SSHの基本的な使い方を知っている
- microSDカードをPCで読み書きできる
全体の流れとゴール
最終的には、電源を入れるだけでRaspberry Pi Zero/Zero 2 WがWi-Fiに自動接続され、MacからSSHでログインできる状態をゴールにします。
ステップの概要
- Step 1: OSイメージの入手とSDカードへの書き込み
- Step 2: ヘッドレス用の設定ファイル(ssh, wpa_supplicant.conf)を置く
- Step 3: Raspberry Piを起動して、IPアドレスを特定する
- Step 4: SSH接続する(+鍵まわりのエラー対処)
背景・困っていたこと
もともと自分が困っていたのは、ざっくりいうとこんなところです。
- 初回起動時にWi-Fiを設定するためだけに、モニターとキーボードを用意するのが面倒
- 引っ越しや回線変更のたびにWi-Fiやルーターが変わり、そのたびに「OSを入れ直してWi-Fiを設定し直す → 既存データが消える」という流れになっていた
- センサー端末のように、設置場所にモニターを持ち込めないケースも多く、「PCだけでWi-Fiを切り替えたい」状態だった
とくにストレスだったのが、データやスクリプトはそのまま残したいのに、Wi-Fiを変えたいだけでOSを初期化するという状況です。
この記事は、過去の自分が読んでくれていたら助かっただろうなという気持ちで書いています。
手順/実装
Step 1:OSイメージの入手とSDカードへの書き込み
1-1. ここでやることのイメージ
- Raspberry Pi Imagerには載っていない raspios_armhf-2023-05-03 のイメージを公式アーカイブからダウンロード
- ダウンロードしたイメージを、Raspberry Pi Imagerの「Use custom image」からSDカードへ書き込み
1-2. 実際の手順
1. 公式アーカイブからOSイメージをダウンロード
ダウンロードURL:
https://downloads.raspberrypi.org/raspios_armhf/images/raspios_armhf-2023-05-03/
ファイル形式は .img または .img.xz のどちらでもOK
2. Raspberry Pi Imagerを起動し、以下の順番で選択
- OS:Use custom image → ダウンロードした raspios_armhf-2023-05-03 を指定
- ストレージ:挿入したmicroSDカードを選択
- 書き込み開始
1-3. うまくいっているか確認する
書き込みが終わったら、一度SDカードを抜き差しして、Macからbootパーティションが見える状態にしておきます。
Step 2:ヘッドレス用の設定ファイルを置く
2-1. 目的
ここでは、モニターなしで起動しても、最初からSSHとWi-Fiが有効になるようにする設定を行います。
(このやり方はBullseye系専用です。Bookworm/Trixieでは動作が異なります)
2-2. 実際の作業
SSHを有効化する(sshファイル)
SDカードをMacに挿すと、boot というパーティションがマウントされます。
boot の直下に、拡張子なしの空ファイル ssh を作成します。
touch /Volumes/boot/ssh
このファイルが存在するだけで、起動時にSSHサーバが自動で有効化されます。中身は空で問題ありません。
Wi-Fiを自動接続する(wpa_supplicant.conf)
同じくboot直下に wpa_supplicant.conf を作成します。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WiFi名"
psk="パスワード"
}
注意ポイント:
- Raspberry Pi Zero系は 2.4GHz帯のみ対応(5GHzには繋がらない)
-
ssidとpskは必ずダブルクォーテーションで囲む - 文字コードはUTF-8、余計な全角スペースや改行が入らないようにする
2-3. 動作確認
設定ファイルを置いたら、SDカードを安全に取り外します。この時点ではまだ確認できないので、次のStepで起動してから確認します。
なぜ後からWi-Fiを変えられるのか(Bullseyeの場合)
Bullseye世代のRaspberry Pi OSは、起動時に boot/wpa_supplicant.conf を /etc/wpa_supplicant/wpa_supplicant.conf にコピーしてくれます。
つまり、一度起動してしまえば、以降は
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
のようにOS上でファイルを編集するだけで、Wi-Fiを変更可能です。
- 自宅Wi-Fi
- スマホのテザリング
- 引っ越し先の新しいWi-Fi
など、モニターがなくても柔軟に切り替えられるため、OSを再インストールする必要がなく、既存データを初期化せずに、PCからだけでWi-Fiを差し替えられます。
Step 3:Raspberry Piを起動してIPアドレスを調べる
3-1. 目的
Raspberry PiをWi-Fiに接続して、SSHで接続するためのIPアドレスを特定します。
3-2. 実際の手順
起動する
-
sshとwpa_supplicant.confを置いたSDカードをRaspberry Piに挿す - 電源(USB)を接続して起動
- 20〜60秒ほど待つ
この間に、Raspberry Piが自動的にWi-Fiに接続されます。
IPアドレスを調べる方法
いくつか方法があります。
【方法1】Macのnmapコマンドを使う
# 例:192.168.0.x のネットワークの場合
nmap -sn 192.168.0.0/24
出力の中に、Raspberry Pi Trading などの表示があれば、それがRaspberry Piです。
【方法2】ルーターの管理画面から確認する
- ルーターの管理画面にアクセスし、接続中のデバイス一覧を確認
- ホスト名が
raspberrypiと表示されることが多い - IPアドレス(例:
192.168.0.20)をメモしておく
【方法3】raspberrypi.localに直接SSHしてみる
環境によっては、mDNSによってホスト名で解決できる場合があります。
ssh pi@raspberrypi.local
これで繋がればIPアドレスを意識しなくてもOK。うまくいかない場合は、nmapやルーターの一覧からIPを確認します。
3-3. 簡単な動作確認
- IPアドレスが特定できた、またはraspberrypi.localで名前解決できた
- 次のStepでSSH接続を試す準備が整った
Step 4:SSHで接続する
4-1. 目的
MacからRaspberry PiにSSH接続して、コマンドラインで操作できる状態にします。
4-2. 実際の接続手順
IPアドレスが分かったら、MacからSSH接続します。
ssh pi@192.168.0.xx
または
ssh pi@raspberrypi.local
初回接続時には、ホスト鍵の確認メッセージが表示されます。
Are you sure you want to continue connecting (yes/no/[fingerprint])?
ここで yes と入力すれば接続が継続され、以降は聞かれなくなります。
- デフォルトユーザー: pi
- デフォルトパスワード(古いイメージの場合): raspberry
4-3. 動作確認
- SSHでログインできた
-
pi@raspberrypi:~ $のようなプロンプトが表示される -
pwdやlsなどのコマンドが実行できる
ハマりポイント・エラーと対処
ケース1:REMOTE HOST IDENTIFICATION HAS CHANGED! が出る
エラーメッセージ:
REMOTE HOST IDENTIFICATION HAS CHANGED!
起きた状況:
- Raspberry Pi OSを再インストールした
- 以前と同じIPアドレス(例:
192.168.0.20)だが、中身が別のOS/別個体になっている - Wi-Fiルーターを変えたあとに、Raspberry PiにSSHしようとしたとき
原因(自分なりの理解):
- Mac側は「前にそのIPにつないだときのホスト鍵」を覚えており、今回の鍵と一致しないため警告している
- SSH が「念のため怪しいかもよ」と教えてくれている状態で、不正アクセスが確定したわけではない
対処方法:
安全に再接続するには、古い鍵情報を削除します。
# ホスト名で削除する例
ssh-keygen -R raspberrypi.local
# もしくはIPアドレスで削除する例
ssh-keygen -R 192.168.0.20
もしくは、~/.ssh/known_hosts を編集して、該当行を手動で削除してもOKです。
削除後、もう一度 ssh すると、新しい鍵を登録するかどうか聞かれるので、内容を確認して yes を選びます。
ケース2:Wi-Fiに繋がらないときのチェックリスト
起きた状況:
- Raspberry Piを起動したが、ルーターの接続デバイス一覧に出てこない
- nmapでもRaspberry Piが見つからない
対処方法:
以下の項目を順番にチェックします。
-
sshファイルを置き忘れている → SSH自体が有効化されていない -
wpa_supplicant.confの記述ミス-
ssid/pskのスペルミス - ダブルクォーテーションの閉じ忘れ
-
- 5GHzのSSIDに接続しようとしている(Zero系は2.4GHzのみ)
- ルーターのDHCPリースが枯渇している
- そもそも別のネットワーク(ゲストWi-Fiなど)に接続している
- OSがBookworm/Trixieなのに、この手順(bootにwpa_supplicant.confを置く)を試している
最後の点は特に注意で、Bookworm/Trixieではこの方法は動きません。その場合は、Raspberry Pi ImagerのWi-Fi設定機能か、NetworkManager向けの設定に切り替える必要があります。
応用・発展
複数のWi-Fiを登録しておく(Bullseyeの場合)
/etc/wpa_supplicant/wpa_supplicant.conf には、複数のnetworkブロックを登録できます。
network={
ssid="HomeWiFi"
psk="xxx"
priority=10
}
network={
ssid="iPhoneHotspot"
psk="yyy"
priority=5
}
priority が高いネットワークが優先的に使われます。
家では自宅Wi-Fi、外ではテザリング、といった形で持ち運びIoTデバイスとして使いやすくなります。
※ Bookworm/TrixieではNetworkManager管理になるため、この書き方ではなく .nmconnection ファイルなどを使う必要があります。
まとめ
この記事の内容をざっくり振り返ると、次のような感じです。
- raspios_armhf-2023-05-03(Bullseye)では、bootに
wpa_supplicant.confとsshを置くだけでヘッドレスセットアップができる - この方法はBookworm/Trixieではそのまま使えない(ネットワーク周りがNetworkManagerベースに変わったため)
- 一度セットアップしてしまえば、
/etc/wpa_supplicant/wpa_supplicant.confを編集するだけでWi-Fiを変更可能 - 引っ越しや回線変更のたびにOSを入れ直す必要がなく、データを初期化せずに、PCからだけでWi-Fi設定を切り替えられる
- モニター・キーボードなしで、Zero/Zero 2 Wを**「電源入れたらすぐSSHで触れるIoTノード」**として運用できる
「ここ、もっといいやり方あるよ」などあれば、コメントで教えてもらえると勉強になります!