[Raspberry Pi] ssh の設定 (サーバ : ラズパイ、クライアント : MacBook Pro)
ssh サーバを ON にする設定
ラズパイはデフォルトでは ssh サーバ (ssh デーモン) が動いていないので、ここからです。
以下のように、ラズベリーマーク –> 設定 –> Raspberry Pi の設定 と進みます。

そうすると以下の画面が立ち上がってきます。

インターフェイス タブをクリックして、

SSH のところを 有効 にポチをつけて OK をクリックします。
ここで ps コマンドなどで sshd が動いていることが確認できない場合、ラズパイを再起動してください。以上で SSH サーバが起動するようになる設定が終わりました。
root の ssh ログインとパスワード認証を禁止する
ssh でラズパイにログインする時、ユーザー名とパスワードの組み合わせで認証する仕組み = パスワード認証、をできなくする設定に変更します。
ラズパイの /etc/ssh/sshd_config ファイルを vi エディタで修正します。
まずは以下のようにして sshd_config ファイルのバックアップを作ります。

ここで sudo vi sshd_config コマンドで修正します。
修正が終わった後の分を diff コマンドで表示してみると、

となります。
- PermitRootLogin no は、root による ssh ログインを禁止する設定です。
- PasswordAuthentication no は、パスワード認証を禁止する設定です。
- PermitEmptyPasswords no は、空のパスワードを認めなくする設定です。
ここで以下のように ssh サーバを再起動し、
$ sudo systemctl restart ssh.service
MacBook Pro からラズパイへの ssh 接続を実施してみると以下のような結果になった。

ラズパイ側でパスワード認証を禁止したわけなので、パスワード入力を求めてくることがなくなって、ssh 接続が拒絶されている様子です。想定どおりです。
ここから次の公開鍵認証の設定をしていきます。
クライアント側で鍵のペアーを作る
鍵のペアーとは、公開鍵と秘密鍵のことであり、その実態はどちらの鍵も単なるファイルである。
まずクライアント側 (我が家の環境では MacBook Pro) で公開鍵と秘密鍵を作ります。
以下のように、
$ ssh-keygen -t rsa -b 4096
を実施して鍵のペアを作った。4096 ビットの RSA 暗号の鍵ペアである。

保存場所を聞いてくるが、そのままエンターを押すと表示されたパスに鍵が保存される。パスフレーズも聞いてくるが、これはパスワードのようなもので自分だけが知っている文字列を入力する。
上記 Your identification has been saved in /Users/nobi/.ssh/id_rsa の identification とは秘密鍵のことであり、秘密鍵のファイル名は id_rsa だ。
上記 Your public key has been saved in /Users/nobi/.ssh/id_rsa.pub の public key とは公開鍵のことであり、公開鍵のファイル名は id_rsa.pub だ。
では出来上がった鍵ファイルを ls と file コマンドで表示させてみる。

クライアント側 (MacBook Pro) で秘密鍵と公開鍵がこれでできた。
ラズパイ側で公開鍵を保存するディレクトリを作る
以下のようにホームディレクトリに .ssh ディレクトリを作成し、パーミッションを 700 に変更している。

.ssh ディレクトリにクライアントの公開鍵ファイルを保存する。クライアント側から scp コマンドで送信する。
が、少し上の方でラズパイの /etc/ssh/sshd_config の修正をしたときに、パスワード認証を禁止にしてしまったので、ここで一時的に sshd_config 内の PasswordAuthentication パラメータを
PasswordAuthentication yes
に修正して、sudo systemctl restart ssh.service コマンドで ssh サーバを再起動する。
クライアント側から公開鍵ファイルを scp でラズパイに送る
以下のように公開鍵ファイル = id_rsa.pub を scp でコピーしてラズパイに送っている。

これで MacBook Pro からラズパイに公開鍵ファイルが届く。以下のようにサーバ側 = ラズパイで確認した。

公開鍵ファイルがラズパイに届いていることを確認後、cat コマンドを使って同じディレクトリ内に authorized_keys というファイルを作っている。
この authorized_keys を見て、ssh サーバは ssh クライアントからの接続可否 = 認証を行っている。
再度ラズパイの /etc/ssh/sshd_config 内の PasswordAuthentication パラメータを
PasswordAuthentication no
に修正して、sudo systemctl restart ssh.service コマンドで ssh サーバを再起動する。
クライアント側からの ssh ログイン確認
MacBook Pro からラズパイに ssh 接続して成功したところ。↓

同じ MacBook Pro から root ユーザー、pi ユーザーで ssh 接続しようとしても認証で弾かれる。

もう 1 台、別のクライアント (MacBook) から、僕のユーザー名 (nobi) で ssh 接続しようとしても認証が通らずログインすることはできない。

ラズパイが持っているのは MacBook Pro で作った公開鍵だ。そして、その公開鍵にマッチする秘密鍵を持っているのは MacBook Pro だ。
だから、この MacBook Pro 以外からは ssh ログインできない。ここまで動作確認できれば良いでしょう。
後処理
クライアント側 (僕の場合 MacBook Pro) に id_rsa.pub ファイル = 公開鍵が残っていたら削除しておきましょう。
ラズパイのホームディレクトリの .ssh ディレクトリに id_rsa.pub ファイル が残っていたら、こっちでも削除しておきましょう。