悪霊にさいなまれる世界 -The Demon-Haunted World

30代独身機械系技術者が雑記/セキュリティ/資産運用なんかを書きます/PGP・GPG Key:BC884A1C8202081B19A7A9B8AB8B419682B02FF8

キーボード・マウス・液晶モニタ・LANケーブル無しでRaspberryPiを初期セットアップする

買ったはいいものの余り使い道がないRaspberryPi、せっかくなのでADS-Bの受信をしてFlightradar24にアップロードでもするか、と思い立ったが、電源・LAN・アンテナ線とケーブルが3本になり非常に移動しづらい。そこでLANをWiFiに変更し、色々とソフトを入れてみたところ見事に起動しなくなった。と言うわけでせっかくの機会なのでRaspberryPiセットアップ手順2020年度版を書こうと思い立ったのである

f:id:scienceasacandleinthedark:20200605202043j:plain

ラズパイ本体・モバイルバッテリー・チューナ・アンテナの組み合わせ。持ち運びは便利だが、胡散臭さここに極まれりという感じである。

さて、RaspberryPiのセットアップをしている記事を見ると初期設定時には液晶を繋いだりキーボードを繋いだり、中々面倒なことをしている。しかし実はそんなモノは必要は無い。必要なのは愛と勇気とTeraTermだ。TeraTermは下記リンクから入手できる。別にPuTTYでも良い。

https://ja.osdn.net/projects/ttssh2/releases/

我々は独自の世界を建設している。新しい理想郷を建設するのである。 したがって伝統的な形をとるキーボードも液晶ディスプレイもいらない。LANケーブルもいらない。

さてさて、気がつけばRaspberryPiのデフォルトOSがRaspbianからRaspberryPi OSと言う名前に変更になった。現状は32bit版がしかないが、近いうちに64bit版もリリースされるらしい。しかもMicroSDカードへの書き込み機能なども付いたRaspberryPi OS Imagerなるものまで配布が開始されている。もちろんそれを使うのもいいだろうが、個人的にはtorrentでサクサクとダウンロードしてしまう方が好みなので使わない。そういうわけでここからが手順になる。

  1. CUIでしか使わないのでRaspberry Pi OS (32-bit) Liteを選択する。

    Download Raspberry Pi OS for Raspberry Pi
  2. Rufusを使ってMicroSDカードへの書き込みを行う。

    Rufus - The Official Website (Download, New Releases)

  3. ssh有効化のため、母艦PCでSDカードを読み込み、ルートにsshと言う空ファイルを作成

    SSH (Secure Shell) - Raspberry Pi Documentation

  4. WiFiに自動で接続させるための設定ファイル、wpa_supplicant.confを作る。内容は接続先のWiFiSSIDパスフレーズを入力する。パスフレーズは暗号化することが望ましいが、とりあえずここでは平文で構わない(あとで変更できる)
    country=JP
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={
        ssid="SSID"
        psk="Password"
    }
    
    これでOK。ステルスESSIDの場合や、より高度なオプションを使用したい場合はArchLinux Wikiなどを参照すると良いだろう。

    WPA supplicant - ArchWiki

  5. wpa_supplicant.confsshと同様に、MicroSDカードのルートに保存する。これだけで自動的に接続してくれる。
  6. RaspberryPiにSDカードを挿入し起動。ルータからDHCPで割り当てられたIPアドレスを確認(ラズパイのMACアドレスは基本的にB8:27:EBで開始されている)する。

ここまでが母艦PCでの操作。ここからTeraTermで接続し、CUIでの作業になる。

  1. TeraTermSSH接続。ID/Passはデフォルトのpi/raspberry。
  2. セキュリティのためおもむろにルートでのログインをロック。vimをインストールする。
    sudo passwd -l root
    sudo apt install vim -y
  3. さらにSSH接続をLAN内に制限。
    sudo vim /etc/ssh/hosts.allow
    sudo vim /etc/ssh/hosts.deny
    hosts.allowsshd:192.168.11.0/24hosts.denysshd:allを追加
  4. IPアドレスDHCP割当から固定に変更。
    sudo vim /etc/dhcpcd.conf
    下記行を追加
    interface wlan0
    static ip_address=192.168.11.4/24
    static routers=192.168.11.1
    static domain_name_servers=192.168.11.1
  5. タイムゾーンWiFiエリアを設定。2.4GHz帯WiFiは実は国別で使えないチャンネルがあったりするためである。ちなみに日本は14ch全てが使える。
    sudo raspi-config
    の4より、Change TimezoneでASIA→TOKYOを、Change WLAN CountryでJPを選択。
  6. systemd-timesyncdを設定。
    sudo vim /etc/systemd/timesyncd.conf

    NTPとFallbackNTPの2項がある。オーソドックスにNICTとntp.orgのプール、あるいはGoogleのNTPでいい。大学ならSINETのサーバがネットワーク的に一番近いかもしれない。

    [Time]
    NTP=ntp.nict.jp
    FallbackNTP=0.jp.pool.ntp.org

    timesyncdを起動。

    sudo timedatectl set-ntp true

    状態を確認

    timedatectl status

    これでNTP serviceがyesになってればいい。

  7. SDカードの寿命を延ばすためにスワップファイルを無効にする。おまじない程度。
    sudo swapoff --all
    sudo systemctl disable dphys-swapfile
  8. パッケージ類を全てアップデートして再起動する。以降は固定割り当てしたIPアドレスで接続できる。
    sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y && sudo apt autoremove -y && sudo apt autoclean -y
    sudo reboot

ここまでで最低限の設定は終了。平文のWiFiパスワードが保存されているのが気持ち悪い場合、WPA supplicantを使用して暗号化パスフレーズに変更する。

  1. wpa_passphrase SSID Passwordを実行。するとWPA用の暗号鍵が生成され、下のような出力が得られる。
    network={
        ssid="SSID"
        #psk="Password"
        psk=b99d2c0fb66194f93ad52b71051e1095dc76e12529321334b3feb18332608eb7
    }
    ダブルクオーテーションのついていないpskの行をコピーする。
  2. /etc/wpa_supplication/wpa_supplicant.confを開き、上でコピーした行を貼り付ける。平文パスフレーズの行は削除し良い。母艦PC側でも同様にしておこう。今後はこれがそのまま使える。

最期に、SSH接続をパスワード方式から意識高く公開鍵方式に変更する。

SSH設定参考サイト:Secure Secure Shell

  1. まずはTeraTermSSHの鍵ペアを作成し、母艦PCに保存する。ここはセキュリティが高く処理も速いEd25519方式を指定する。なお、秘密鍵TeraTermのフォルダに保存するとなぜか接続が失敗するので、その場合は作業用のフォルダを作ってそこに保存する。

    f:id:scienceasacandleinthedark:20200606092851p:plain

  2. TeraTermの「ファイル」から「SSH SCP」を選択し、公開鍵"id_ed25519.pub"を"Authorized_keys"としてRaspberryPiに移動。

    f:id:scienceasacandleinthedark:20200606093857p:plain

  3. RaspberryPi側の設定を行う。ssh用のディレクトリを作成し、公開鍵を移動。パーミッションを設定。このときにsshディレクトリの所有者・グループをroot:rootからpi:piに変更しておかないといけない(ここで引っかかった)

    sudo mkdir .ssh
    sudo chown -R pi:pi .ssh
    sudo mv authorized_keys .ssh/authorized_keys
    sudo chmod 700 ~/.ssh/
    sudo chmod 600 ~/.ssh/authorized_keys
  4. SSHの設定を変更。
    sudo vim /etc/ssh/sshd_config
    下記行を追加しルートでのログインを禁止、ポートを変更、キーファイルを指定、パスワードでのアクセスを禁止。
    PermitRootLogin no
    Port 34513
    PubkeyAuthentication yes
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    AuthorizedKeysFile /home/pi/.ssh/authorized_keys
    KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
    
  5. 変更を保存しSSHを再起動。ただしミスがあったときアクセスの方法がなくなるのでこのとき開いているTeraTermは閉じない。
    sudo systemctl restart ssh.service
    新たにTeraTermのウィンドウを開き、新しいポートでアクセス。パスフレーズではなく"RSA/DSA/ECDSA/ED25519鍵を使う"を選択し、1.で保存した秘密鍵を指定。アクセスできることを確認する。また、パスフレーズでのアクセスが通らないことも確認する。

問題が無ければこれで初期設定は終了。楽しいラズパイ生活を楽しもう