Raspberry Pi Zero WのRaspbianでWi-Fiの設定

RaspbianをインストールしたRaspberry Pi Zero Wでディスプレイや外付けキーボードを利用せずにPCのみでWi-Fiの接続設定を行う手順のメモです。

使用したRaspberry Pi Zero WとRaspbianの情報は以下です。

$ cat /proc/device-tree/model
Raspberry Pi Zero W Rev 1.1
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

仕組み

RaspbianではSDカード直下にwpa_supplicant.confの名前でファイルがある場合raspberrypi-net-mods.serviceによって/etc/wpa_supplicant/wpa_supplicant.confにコピーされます。

Wi-Fiの接続情報を記述したwpa_supplicant.confを置いたSDカードを差してRaspberry Piを起動することでヘッドレスでWi-Fiに接続することができます。

手順

手順は以下になります。

  1. PCでファイルwpa_supplicant.confを作成する
  2. Wi-Fiの接続情報を記述する
  3. PCにSDカードを差しwpa_supplicant.confをSDカード直下にコピーする
  4. SDカードをRaspberry Piに差して起動する

またSDカード直下にsshまたはssh.txtの名前でファイルがある場合sshswitch.serviceによってSSHが有効になります。

wpa_supplicant.confの作成

まずはPCでwpa_supplicant.confを作成します。

このファイルにWi-Fiの接続情報を記述するのですが以下に注意が必要です。

  • ファイルの改行コードはLFで記述するようにします。
  • Raspberry Pi Zero Wが対応している無線LANの規格は「IEEE 802.11 b/g/n 2.4 GHz」なので2.4GHzの周波数のSSIDを設定します。

以下はSSIDが「Wi-Fi-SSID」、パスフレーズが「password」の場合のWi-Fiの接続情報の記述例です。

wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="Wi-Fi-SSID"
  psk="password"
}

パスフレーズを平文で記載することに抵抗がある場合はパスフレーズをハッシュ化して記載することもできます。パスフレーズをハッシュ化はこちらのサイトでブラウザ上で行うことができます。

パスフレーズをハッシュ化して記載した例は以下になります。平文のパスコードと同様にpskに設定しますがハッシュ化した場合はダブルクォーテーションで囲わないようにご注意ください。

wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="Wi-Fi-SSID"
  psk=027d761ab68db02764829ae463b5fae97836924752423ec5930eff1689e6e333
}

接続情報を記述したらwpa_supplicant.confをSDカードの直下にコピーします。SSH接続を有効化する場合はSDカード直下にsshまたはssh.txtの名前のファイルの作成も行います。

動作確認

それでは動作確認を行います。

SDカードをRaspberry Piに差して電源につないで起動するまでしばらく待ちます。

Wi-Fiの設定がうまくできていればRaspberry Piにpingが通ります。

ping raspberrypi.local

SSH接続の疎通は以下のコマンドで行います。

初期パスワード「raspberry」を入力してログインできることを確認します。

パスフレーズをハッシュ化する仕様について

参考までにパスフレーズをハッシュ化する仕様について記載します。

WAP2のパスフレーズは、以下の引数の鍵導出関数PBKDF2を用いてハッシュ化を行います。

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

疑似乱数関数はHMAC-SHA1、ソルトにはSSIDを使用、ストレッチング回数は4096回、導出鍵のビット長は256(32バイト)です。

Powershellでハッシュ化する場合は以下で行うことができます。

powershell
[BitConverter]::ToString(
  [Security.Cryptography.Rfc2898DeriveBytes]::new(
    "password",
    [Text.Encoding]::UTF8.GetBytes("Wi-Fi-SSID"),
    4096,
    [Security.Cryptography.HashAlgorithmName]::SHA1
  ).GetBytes(32)
).ToLower().Replace("-", "")

利用される場合は、SSID(Wi-Fi-SSID)とパスフレーズ(password)をご自身のWi-Fiの接続情報に書き換えて実行してください。また、こちらのスクリプトではSSIDが8文字未満の場合はエラーになりますのでご注意ください。