2024年にRaspberryPiをセットアップする
引き出しに眠っていた Raspberry Pi 3 Model B がありました。
同時に、使われていない HDD が余っています。
3 連休に出会ってしまった奇跡の余り物で NAS を構築してみたい。
その前段のラズパイセットアップが昔とだいぶ変わっていたので、手順をまとめます。
OS をインストールする
ラズパイといえば、公式サイトから Raspbian イメージを落としてきて、microSD に焼いて...
そんなイメージで止まっていましたが、今はRaspberry Pi Imagerなるツールが公式から出ているようです。https://www.raspberrypi.com/software/
これは microSD のフォーマットから OS の焼き込みまで、すべてを行ってくれるアプリケーションです。
わざわざでかいファイルを個人で落としてきて管理する必要がなくなります。便利です。
Homebrew で配布されていたので、こちらを利用しました。
brew install --cask raspberry-pi-imager
というか、OS の名前も Raspbian から Raspberry Pi OS に変わってるんですね...いつの間に
昔のファイルがあれば退避する
ラズパイいじいじして遊んでいた頃のファイルが残っていました。
電気つけようとしてたり、CO2 濃度測って GoogleSpreadSheet に送ったり。
その辺のスクリプト無くしたなーと思ってたので、見つけて嬉しいですね。
OS を書き換える前に Mac に退避します。
次のコマンドを使いました。
rsync -av -e ssh [user]@[host]:./src/ path/to/target
具体イメージは次のとおり。実行は Mac からです。
rsync -av -e ssh [email protected]:/home/pi/co2_checker.py Download
ラズパイのモデル名を知る
昔買ったので、自分のマシンのモデルを忘れていました。
幸い昔セットアップした状態で動いたので、ラズパイのコンソールで次のコマンドを実行します。
more /proc/device-tree/model
OS を選ぶ
OS は主に 3 種類あるようです。
- Raspberry Pi OS
- GUI 付きの最小構成っぽい。デフォルトはこれで良いと思う
- ただし、今回の NAS 構築で利用を予定している
OpenMediaVault
の都合上、Lite を選択する
- Raspberry Pi OS Lite
- CUI のみの軽量版。
- Raspberry Pi OS Full
- GUI 版にプログラミングの学習環境やらなんやら入ってる版。
厳密にはもっとありましたけど、大雑把にこの 3 つが違うのは知っておくと良いでしょう。
セキュリティ対応
Qiita にちょうどよくまとまっている記事をみつけたので、こちらを参考に設定します。
実は先ほどの OS 書き込みツールの設定でpi
ユーザーを最初から作らないような設定が可能でしたので、序盤のユーザー云々はなしで良さそうでした。
公開鍵方式でのログインに限定する
ラズパイで SSH をオンにするとパスワードでログインする方式がデフォルトで動きます。
当然ですが、これはホスト名、ユーザー名、パスワードの文字列を知るだけでアクセス可能になることを意味します。
これを防ぐために公開鍵方式の認証だけを有効にします。
キーの作成
RSA のキーペアを作成します。Mac のターミナルで以下を実行。
ssh-keygen -t rsa
キーペアの名前は適当でいいです。パスフレーズはある方が高セキュリティです。キーの所持+文字列の 2 段構えになるからですね。
公開鍵の登録
先ほどの昔のファイル退避に使ったコマンドを逆転して、公開鍵をラズパイに送りましょう。
SSH アクセスで用いるラズパイ上のユーザーホームに.ssh
ディレクトリを作成します。
mkdir .ssh
ここではpi
ユーザーだったとして、Mac から次のコマンドで公開鍵を送信します。
rsync -av -e ssh ~/.ssh/id_rsa.pub [email protected]:/home/pi/.ssh
ラズパイはアクセスのリクエストが来ると、~/.ssh/authorized_keys
から対応する公開鍵を探すようです。
したがって、ラズパイのターミナルを操作し、送信された公開鍵を書き込みます。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
書き込めたらid_rsa.pub
は削除して大丈夫です。
rm ~/.ssh/id_rsa.pub
このディレクトリはラズパイ上の他のユーザーにアクセスや編集されないようにパーミッションを変更しておきましょう。
# .sshは自分だけが書き込み、読み取り、実行可能
chmod 700 ~/.ssh
# authorized_keysは読み取りと書き込みで良いので600
chmod 600 ~/.ssh/authorized_keys
ラズパイのコンフィグ書き換え
/etc/ssh/sshd_config
を書き換えて、次の変更を行います。
- 公開鍵方式によるログインを有効化する
- パスワードのよる SSH ログインを禁止する
- ポートを変更する
sudo vi /etc/ssh/sshd_config
#
がついているものはコメント状態になっています。デフォルト値が書いてあるようですね。
ファイルの上部からの方が見やすいので、順に紹介します。
まずは Port を変更しましょう。値は他と被らなければなんでもいいです。
- #Port 22
+ Port XXXXX
やらなくても一緒ですが、authorized_keys
を読みに行くというのを明示しましょう。
- #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
+ AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
最後にパスワードのよるログインは無効にしましょう。公開鍵方式のみを許容します。
- #PasswordAuthentication yes
+ PasswordAuthentication no
以上が終わったら保存して、ssh サービスを再起度します。
sudo /etc/init.d/ssh restart
以上で公開鍵方式のみでアクセスを許可するようになりました。
(おまけ)Mac 側の対応
Mac からラズパイにアクセスする際は、通常以下のようなコマンドを入力します。
ssh -p XXXXX -i ~/.ssh/id_rsa [email protected]
これは先ほど指定したポート番号と作成した秘密鍵を指定して、アクセスを行うコマンドですが、毎回打つのは鬱陶しいです。
ということで、簡単にアクセスできるように Mac 側の~/.ssh/config
ファイルを作成して次のような記述を追加します。
Host paspi
HostName raspberrypi.local
User pi
port XXXXX
IdentityFile ~/.ssh/id_rsa
これを記述しておくと、次のコマンドで SSH 接続可能になります。
ssh raspi
まとめ
ラズパイのハードの進化は X 等々で見かけていましたが、ソフト周りも以前より充実していて驚きました。
SSH 接続周りはラズパイとりあえず触ってみたい!という気持ちの人にはとりあえずのお作法に見えたりしますよね(過去の自分がそうでした)
ちなみに OS の選択をミスって入れ直すなどした際に、同じホスト名にすると SSH 接続のエラーが出ることがあります。
前回接続時にラズパイ側から発行された公開鍵を保存していたものと、OS 入れ直し後のキーの値が違うからだそうです。
Mac 側では.ssh/known_hosts
内にこの情報を記録しています。エディタで編集してもいいですが、次のコマンドでもリセットできます。(当然ですが、ホスト名の部分はご自身が接続に利用したものにしてください)
ssh-keygen -R raspberrypi.local
これは次の Qiita 記事を参照しました。ありがとうございます。https://qiita.com/hnw/items/0eeee62ce403b8d6a23c