Raspberry Pi Zero W をヘッドレスでインストールしてSSH接続する

今回購入したRaspberry Pi Zero WH

Raspberry Pi Zero WHを購入した、正規の代理店だと2000円程度なのだが在庫が無いのでAmazonで出品している所から買った。

直接中国かイギリスから輸入してそのまま販売しているのからなのか、3500円ほどした。
結構高かった。

準備

  • Raspberry Pi 本体
    • 私はRaspberry Pi Zero WH を使用
    • Wi-Fiの使える機種であればどれでもOKのはず
  • micro SD カード
    • 32GBを使用
    • 8GBでもおそらく問題ない
  • PCとターミナル
    • Windows 10でcygwinを使用
    • MacやLinuxでもOK、Linuxの方が都合は良さそう
  • マイクロUSBケーブル
    • 給電できればOK
  • Wi-Fi環境
    • PCと同じWi-Fiネットワークでないと接続できないので、PCが接続しているルータのSSIDとパスワードを準備しておく

インストールするOS

  • Raspberry Pi OS (32-bit Lite Minimal image based on Debian Buster)
    • Version: May 2020
    • Release date: 2020-05-27
    • Kernel version: 4.19

インストール手順

A. SDカードへラズパイOSをコピー @PC

  1. PCにSDカードを入れる
  2. https://www.raspberrypi.org/downloads/ から Raspberry Pi ImagerをダウンロードしPCにインストールし起動する
  3. RASPBERRY PI OS LITE(32bit)を選択
  4. SDカードを選択(ストレージの選択に注意)
  5. WRITE
  6. 完了したらSDカードを抜いてからもう一度挿す
  7. SDカード内にファイルがちゃんと入ってるか確認

B. SSHの有効化 @PC

  1. ターミナルをたち上げて下記で空のsshファイルを作成する
    1
    $ touch <SDカードへのパス>/ssh

C. Wi-Fiの設定 @PC

  1. PCが接続しているWi-FiルータのIDとパスワードを準備
    • #zero w はA(5Ghzには対応していないはずなので注意)
  2. Wi-Fi設定ファイルの作成
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ vim <SDカードへのパス>/wpa_supplicant.conf

    # wpa_supplicant.confの内容
    # 例下記のルータ、パスワードの場合
    # ルーターのSSID: XXX-ROUTER-001
    # パスワード/パスフレーズ: xxxxxxx

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    country=JP

    network={
    ssid="XXX-ROUTER-001"
    psk=xxxxxxx
    }
    パスワード/パスフレーズを暗号化したい場合は
    https://raspida.com/wpa_passphrase
    を使用して暗号化できるがあまり意味ない気がする。

D. IP アドレスの固定化 @PC

この方法は私の環境ではできなかったので、参考までに。
ログイン後に固定化できるのであまり焦る必要は無し。

1
2
3
4
5
6
7
8
9
10
11
12
13
1. IPアドレスの確認
# 使われているIPを調べ、重ならないIPを適当に決める
$ arp -a

2. 固定化用ファイルの作成
$ vim <SDカードへのパス>/dhcpcd.conf

# dhcpcd.confの内容
# IP 192.168.1.123で固定する場合の例
interface wlan0
static ip_address=192.168.1.123/24
static routers=192.168.1.0
static domain_name_servers=192.168.1.0

E. ラズパイ起動

  1. SDカードをPCから抜いて、それをラズパイに入れる
  2. ラズパイにUSBケーブルをつなぐ、USBケーブルは給電用の方(PWRって書いてある)に挿す
  3. マイクロUSBケーブルのもう片方をPCのUSB差し込み口などに入れる、これで電源が入る
  4. ラズパイの緑色のランプが点滅したりする、落ち着くまで1分くらい?待つ

F. IP探索 @PC

bonjourが入っていてめんどくさいことをしたくない方は$ ssh pi@raspberrypi.localで入れます。
そしてHまで飛んでください。
お疲れさまでした。

私はbonjourを入れるのが嫌だったので自力でIPを探索する方法を取りました。

  1. ラズパイ探索用シェルスクリプトsearch_rasp.shをダウンロードしてきて実行する
  2. 見つかると Found! Raspberry pi IP is ... と出て、IPが表示されます。見つかったらGに行きます。
  3. うまく行かない場合はbonjour入れるかpingを叩いて見つけます。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # ターミナルAで監視
    # これを表示しておくと見つけた時に気づきやすい
    $ ip monitor

    # PCのWi-FiネットワークのIPが192.168.1.xxだった場合
    # ターミナルBで
    $ ping 192.168.1.1
    #~ 略 ~
    $ ping 192.168.1.255

    # 255回たたくうちにMACアドレスの先頭が"b8:27:eb"か"dc:a6:32"のものが出てくるはず。
    # それがラズパイです。

    # 下記のコマンドで一応ホントに合っているか確認
    $ arp -a
    ($ ip neigh)

G. 公開鍵の設定をしてSSH接続 @PC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 公開鍵と秘密鍵を作成
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_aiueo

# 2. ラズパイに公開鍵をコピー(下記はラズパイのIPが192.168.1.123の場合)
$ ssh-copy-id -i ~/.ssh/id_aiueo.pub pi@192.168.1.123
# パスワードを聞かれるので"raspberry"

# 3. SSH接続の設定
$ vim ~/.ssh/config

# ~/.ssh/configに下記を追加
Host rasp
HostName <ip>
User pi
IdentityFile ~/.ssh/id_aiueo
Port 22

# 4. SSH接続
$ ssh rasp

# 5. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! が出たら
$ ssh-keygen -R <ip>

H. ラズパイでの設定 @Raspcerry Pi

もうラズパイに入れたので自由にいろいろやってください。
固定IP化をしておくといろいろ楽になると思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 1. Vimのインストール
$ sudo apt install vim

# 2. IPの固定化
$ vim /etc/dhcpcd.conf`
#ip 192.168.1.123 の例
#下記を追加して保存する
interface wlan0
static ip_address=192.168.1.123/24
static routers=192.168.1.0
static domain_name_servers=192.168.1.0

# 3. 再起動
$ sudo reboot

# 4. 再度SSH接続

# 5. パスワード接続禁止
$ sudo vim etc/ssh/sshd_config`
# 下記をnoにする
PasswordAuthentication no

# 6. ラズパイのアップデート
#下記のコマンドをたたく
$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade
$ sudo apt autoremove

# 7. ラズパイのシャットダウン
$ sudo shutdown -h now

I. 完了

こんな感じでラズパイOSをインストールしてSSH接続できます。一番めんどくさいところはSSH接続するところだと思います、bonjourを使えば楽みたいですがbonjourを入れなくてはならないので私は自力でやる方法を選びました。
bonjourが入ってればかなりするっとSSH接続までできると思います。

あと公開鍵認証でSSH接続する部分もめんどくさい人はすっ飛ばしてください。
$ ssh pi@<あなたのラズパイIP>を叩いてからパスワードで入ってください。

下記のサイトを参考にさせてもらいました、というか下記の方が詳しいのでそっちを見てください。

参考サイト:
https://memo.appri.me/iot/rpi0-headless-setup#Raspbian_%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
https://qiita.com/ljourm/items/ee01c2b3d48c9958b9b3