2020年6月12日金曜日

公開鍵認証を用いてRaspberry PiにSSH接続する

目的

Raspberry Piにssh接続はできるが、パスワード認証だと万が一外につながった時に踏み台にされたり燃やされたりと心配なので鍵認証に変更する


以下は全てMacからパスワード認証でSSH接続をして行った

鍵を生成する

ssh-keygenと打ち、保存場所とパスワードを入れることで生成される

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
********
+----[SHA256]-----+

鍵を保存する

適当な箇所に鍵を保存する

今回は、.ssh以下にrpiフォルダを作成した

$ mkdir .ssh/rpi
$ mv id_rsa.pub .ssh/rpi/
$ mv id_rsa .ssh/rpi/

Macに秘密鍵(id_rsa)をコピーする

Macでもう一つターミナルを開く

scp 欲しいファイル ダウンロード先

$ scp pi@IPアドレス:~/.ssh/id_rsa ~/Desktop

SSH設定を変更する

ここで失敗するとSSH接続ができなくなるが、そうなった場合はRaspberry pi側本体側で操作して修正をする

sudo vim /etc/ssh/sshd_config

PermitRootLogin no
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile %h/.ssh/rpi/id_rsa.pub
PasswordAuthentication no

上記を変更・追加をする

PermitRootLogin: ルートログインの禁止

PubkeyAuthentication: 公開鍵認証を許可

RSAAuthentication: RSA認証を許可

AuthorizedKeysFile: 公開鍵の保存場所指定

PasswordAuthentication: パスワードログインの禁止

余裕があればPasswordAuthenticationはyesのまま一回秘密鍵でのログインを実施した方が良い

設定に失敗していても、パスワードでのログインができるので


設定の有効化

$ sudo /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service

問題がなければOKと出る


接続元での確認

macのターミナルを開き、秘密鍵を指定してログインをする。

秘密鍵生成時のパスワードを聞かれるので入力すると接続される

$ ssh -i ~/Desktop/id_rsa -p 22 pi@RpiのIPアドレス
Enter passphrase for key '/Users/***/Desktop/id_rsa':
Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jun 12 11:41:31 2020 from 192.168.1.2
pi@raspberrypi:~ $

また、パスワード認証形式で弾かれることも確かめておく

ssh pi@RPiのIPアドレス
pi@****: Permission denied (publickey).

macのSSH configファイルに設定を書いておく

デスクトップにあるRaspberry pi向けsshの秘密鍵をmacの何処かに保存する(以下では~/.ssh/rpi/)

下記のようにconfigファイルに設定を書く

$ mv ~/Desktop/id_rsa ~/.ssh/rpi
$ cat ~/.ssh/config

Host rpi
    HostName 192.168.1.29
    IdentityFile ~/.ssh/rpi/id_rsa
    User pi

$ ssh-add ~/.ssh/rpi/id_rsa
$ ssh rpi

Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jun 12 12:52:06 2020 from 192.168.1.2
pi@raspberrypi:~ $ 

最後に

ポートスキャン対策でPort番号もデフォルトの22から他にした方が良いとされる。

しかし今回は、ローカルネットワークでの使用のみでルータで22番へのアクセスは禁止しているので変更はしない