ヘッドレスなラズパイゼロをケーブルの類を一切使わずにセットアップ
モニターもキーボードも付いてないヘッドレスなラズパイRaspberry Pi Zero WHをLANケーブルすら使わずにセットアップする方法です。今回のセットアップ目標は、ラズパイをインターネットに接続し、更に外部パソコンからSSH接続できるところまでとします。
目次
前提
- セットアップ対象のラズパイはRaspberry Pi Zero WH
- ラズパイはモニター無し、キーボード無し、そしてLANケーブルも無し
- ラズパイのネットワーク環境:
- Wi-Fiネットワーク接続。接続先SSID名はMyRouterとする。
- 静的IPアドレス:192.168.179.10
- デフォルトゲートウェイ:192.168.179.1
- サブネットマスク:255.255.255.0
- DNS:192.168.179.1
- ラズパイに接続する外部パソコンはLinux
- セットアップ手順:
- ラズパイのOSセットアップ (OSはRaspbian Stretch Lite版)
- ラズパイからインターネット接続
- ラズパイへ外部パソコンからSSH接続 (Wi-Fiローカルネットワーク経由 & USBで直接接続)
用意するモノ
- Raspberry Pi Zero WH ボード本体 :point_right:品薄なラズパイゼロWHを楽天で調査!
- micro SDHCカード 16GB (SONY SR-16UY3A)
- 電源ケーブル 5V 1.0A (スマホ用充電ケーブルでもOK!)
- 外部パソコン (Linux)
Raspbian のインストール
RaspbianのOSイメージを作成
外部パソコン上で以下の手順を実行します:
- Raspberry Pi 公式サイトからRaspbian Stretch Lite版のOSイメージのzipファイル
2019-04-08-raspbian-stretch-lite.zip
をダウンロード。今回はターミナル操作のみなのでLite版で十分です。一応チェックサムを確認:
$ sha256sum ./2019-04-08-raspbian-stretch-lite.zip
03ec326d45c6eb6cef848cf9a1d6c7315a9410b49a276a6b28e67a40b11fdfcf ./2019-04-08-raspbian-stretch-lite.zip
OK!
ダウンロードしたzipを解凍し、OSイメージ(
2019-04-08-raspbian-stretch-lite.img
)を抽出。パソコンにSDカードを挿す。
SDカードのパスを特定しておく (例:
/dev/mmcblk0
) :
$ sudo fdisk -l
- SDカードのパーティションを綺麗に掃除:
$ sudo fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
コマンド (m でヘルプ): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
コマンド (m でヘルプ): d
パーティション番号 (1,2, default 2): 1
Partition 1 has been deleted.
コマンド (m でヘルプ): d
Selected partition 2
Partition 2 has been deleted.
コマンド (m でヘルプ): w
The partition table has been altered.
- SDカードをアンマウント:
$ sudo umount /dev/mmcblk0*
NOTE:アンマウントした時に何らかのエラーが出るかもしれませんが、ここはスルーしてもOK。
- OSイメージを焼く:
$ sudo dd bs=1M if=./2019-04-08-raspbian-stretch-lite.img of=/dev/mmcblk0
NOTE:OSイメージが焼き終わったら、SDカードをパソコンから抜き差しして再マウントし、SDカードにrootfs/
とboot/
の2つのパーティションが作られていることを確認してください。
ラズパイの通電&起動確認
ここからラズパイの設定を弄っていくことになりますが、ちょっとその前に、ここでラズパイがデフォルトの状態で通電&起動するか確認しておきましょう。SDカードをラズパイに差し替え、基盤のPWRと書いてある方のUSB挿入口に電源ケーブルを挿します。すると、ラズパイが自動的に起動します。ここで緑色のLEDが点滅していれば起動確認はOKです。(もしここで緑色LEDが点滅しなければ、残念ながらSDカードもしくは基盤の故障の可能性があります)
通電確認が終わったらもう一度、SDカードをラズパイからパソコンの方に挿し直してください。ラズパイを設定していきましょう。
SSHの有効化
Raspbianの最新のバージョンではSSHがデフォルトで無効になっているので、それを有効化する必要があります。とはいってもSSHの有効化はとても簡単で、OSイメージを焼いたSDカードのboot/
ディレクトリにssh
という空ファイルを設置するだけです:
$ sudo touch /SDカードのパス/boot/ssh
Wi-Fiの設定
利用するWi-Fiのネットワーク設定値を標準出力します:
$ sudo wpa_passphrase MyRouter <WIFIパスワード>
network={
ssid="MyRouter"
#psk="生のWIFIパスワード"
psk=暗号化されたWIFIパスワード
}
TIP:もし接続予定のWi-Fiネットワークが他にもある場合は、そちらも同じように出力しておきます。
上記で出力された設定値をコピーし、wpa_supplicant.conf
に追記します。
rootfs/etc/wpa_supplicant/wpa_supplicant.conf
# 環境を日本に設定
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# 追記!
network={
ssid="SSID名"
psk=暗号化されたWIFIパスワード
}
TIP:Wi-Fi接続設定は wpa_supplicant を使う方法の他にもNetworkManagerを使ってネット接続の設定を行う方法もあります。
IPアドレスを固定
ラズパイのIPアドレスを固定します。IPアドレスを固定しておけば、後々ラズパイをWi-Fi中継器として利用する時などに便利です。固定IPアドレスの設定はDHCPクライアントデーモンの設定ファイルdhcpcd.conf
に記述します。
rootfs/etc/dhcpcd.conf
...
interface wlan0
static ip_address=192.168.179.10/24
static routers=192.168.179.1
static domain_name_servers=192.168.179.1
ラズパイの起動
SDカードを再びラズパイに挿し替え、ラズパイに電源ケーブルを挿して起動してください。起動後数十秒ほどでネットワークに繋がります。
ラズパイにpingが飛ぶか確認:
$ ping 192.168.179.10
PING 192.168.179.10 (192.168.179.10) 56(84) bytes of data.
64 bytes from 192.168.179.10: icmp_seq=1 ttl=64 time=21.1 ms
...
OK!
ラズパイへSSH接続
次は外部パソコンから無線LAN経由でSSHで接続してみましょう。 ユーザ名pi
、パスワードraspberry
(デフォルト)でSSHログインできます:
$ ssh pi@192.168.179.10
...
pi@raspberrypi:~ $
SSHログインをパスワード方式から鍵認証方式へ (重要)
セキュリティのため、デフォルトのパスワード方式のSSHログインを安全な鍵認証方式へ切り替えておくことを強く推奨します。設定手順は以下の通り。
まずは外部パソコン上でキーペアを生成:
$ mkdir ~/.ssh/rpi/ && cd ~/.ssh/rpi/
$ ssh-keygen -t rsa
$ ls
id_rsa (秘密鍵) id_rsa.pub (公開鍵)
公開鍵をラズパイへ転送:
$ scp ~/.ssh/rpi/id_rsa.pub pi@192.168.179.10:/tmp
ラズパイへSSHログイン:
$ ssh pi@192.168.179.10
公開鍵を許可公開鍵一覧に追加:
pi@raspberrypi:~ $ cd ~
pi@raspberrypi:~ $ mkdir .ssh
pi@raspberrypi:~ $ cat /tmp/id_rsa.pub >> .ssh/authorized_keys
pi@raspberrypi:~ $ chmod -R go= .ssh
ラズパイのSSHサーバ設定を変更:
/etc/ssh/sshd_config
...
PermitRootLogin no # rootログインの禁止
PubkeyAuthentication yes # 鍵認証方式を有効化
PasswordAuthentication no # パスワード認証方式を無効化
SSHサーバの再起動:
pi@raspberrypi:~ $ sudo /etc/init.d/ssh restart
一旦ラズパイから抜ける:
pi@raspberrypi:~ $ exit
確認のため、外部パソコンから普通にSSHログインを試してみましょう:
$ ssh pi@192.168.179.10
Permission denied (publickey).
OK、ちゃんとパスワード方式でのログインは拒否されてますね。
では次に秘密鍵を使ったSSHログインを試してみましょう:
$ ssh -i ~/.ssh/rpi/id_rsa pi@192.168.179.10
...
pi@raspberrypi:~ $ ping www.google.co.jp
PING www.google.co.jp (172.217.24.131) 56(84) bytes of data.
64 bytes from nrt20s01-in-f131.1e100.net (172.217.24.131): icmp_seq=1 ttl=49 time=74.8 ms
...
成功! インターネット接続もうまく行ったことがわかります。
USBで直接ラズパイにSSH接続する方法
ラズパイゼロ(Raspberry Pi Zero
)には、USBで直接ラズパイに接続するUSB OTG
モードというものがあります。この接続方法はWi-Fiなどのネットワーク接続が不要で、いちいちSDカードを取り出さなくても直接ラズパイの中身を弄れるためとても重宝します。
設定は簡単です。
まず、avahi-daemon
をラズパイとパソコン(Linux)の両方にインストールします。これを入れることでraspberrypi.local
というサーバ名でラズパイへアクセスできるようになります。ちなみにRaspbian(Stretch)には最初からインストールされていますので、パソコン側だけ入れれば良いでしょう。
ラズパイ側とパソコン側の両方でavahi-deamon
をインストール:
$ sudo apt install avahi-daemon
次にラズパイ側のファイルを少し弄ります。
ラズパイ側のconfig.txt
というファイルの末尾にdtoverlay=dwc2
を1行追加します:
/boot/config.txt
...
dtoverlay=dwc2
また、cmdline.txt
というファイルのrootwait
の直後にmodules-load=dwc2,g_ether
を追加します:
/boot/cmdline.txt
dwc_otg.lpm_enable=0 (中略) rootwait modules-load=dwc2,g_ether
ラズパイの基盤のUSBと書いてある方のUSBポートにUSBケーブルを挿してパソコンと接続、ラズパイを起動します。
パソコン側からraspberrypi.local
というサーバ名指定でSSH接続してみましょう:
$ ssh -i ~/.ssh/rpi/id_rsa pi@raspberrypi.local
IPアドレスを指定しなくても接続できました。
BluetoothでラズパイにSSH接続する方法
WiFi等が無い環境ではBluetooth経由でSSH接続できるととても助かります。ラズパイゼロ(Bluetoothを搭載)ならBluetooth経由でSSH接続することもできます。
おまけ
タイムゾーンとロケールの変更
もし必要であればタイムゾーンとロケールも変更しておきましょう。 ラズパイにSSHログイン後、以下のようにraspi-config
を使って変更できます: (noint
は非インタラクティブモードを意味します。)
## タイムゾーンを Asia/Tokyo に変更:
pi@raspberrypi:~ $ sudo raspi-config nonint do_change_timezone Asia/Tokyo
## ロケールを ja_JP.UTF-8 (日本語UTF-8) に変更:
pi@raspberrypi:~ $ sudo raspi-config nonint do_change_locale ja_JP.UTF-8
TIP:ロケール設定の反映にはOS再起動が必要です。参考