Raspberry Pi 4 にて、公開鍵認証方式でSSH接続する
ラズパイにWindows PCから公開鍵認証方式でSSH接続してみます。
参考:Raspberry Piに公開鍵認証を使ってssh接続する
使用機種:Raspberry Pi 4 Model B 4GB
※パスワード認証にてSSH接続はできている前提です。
はじめに、Windows PCからラズパイにSSHで接続します。私はTeraTermを使用します。
まず、保存先として、/home/pi/.ssh/ ディレクトリを作成しておきます。
pi@raspberrypi:~ $ mkdir /home/pi/.ssh
続いて公開鍵と秘密鍵のキーペアを作成します。
pi@raspberrypi:~ $ sudo ssh-keygen -t rsa
作成した公開鍵ファイルの保存名は、/home/pi/.ssh/id_rsa とします。
※公開鍵: /home/pi/.ssh/id_rsa.pub
※秘密鍵: /home/pi/.ssh/id_rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /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:(複雑な文字列) root@raspberrypi
The key's randomart image is:
+---[RSA 3072]---+
| .= o...|
| . + . ..+|
| o ..+|
| . o .... |
| S +.+.o |
| = * *o++.|
| . . +.*o +|
| = ooo=.|
| . o ..E |
+----[SHA256]----+
作成された秘密鍵を、Windows PCに転送しますが、秘密鍵はrootユーザーのみが扱えるため、piユーザーでは権限がありません。
一時的に/home/pi/.ssh/id_rsa の権限を変更します(あとで元に戻します!)
pi@raspberrypi:~ $ cd ~/.ssh
pi@raspberrypi:~/.ssh $ ls -l
total 8
-rw------- 1 root root 2602 Mar 19 01:52 id_rsa
-rw-r--r-- 1 root root 570 Mar 19 01:52 id_rsa.pub
pi@raspberrypi:~/.ssh $ sudo chmod o+r id_rsa
pi@raspberrypi:~/.ssh $ ls -l
total 8
-rw----r-- 1 root root 2602 Mar 19 01:52 id_rsa
-rw-r--r-- 1 root root 570 Mar 19 01:52 id_rsa.pub
Teratermの「ファイル > SSH SCP」から、受信したいファイルのパスと保存先を入力して、秘密鍵ファイルid_rsa と公開鍵ファイルid_rsa.pub を転送します。
無事にファイルを転送できたら、id_rsaの権限を元に戻します。
pi@raspberrypi:~/.ssh $ sudo chmod o-r id_rsa
pi@raspberrypi:~/.ssh $ ls -l
total 8
-rw------- 1 root root 2602 Mar 19 01:52 id_rsa
-rw-r--r-- 1 root root 570 Mar 19 01:52 id_rsa.pub
ラズパイにある公開鍵ファイル id_rsa.pub の内容を、.sshフォルダの authorized_keysファイルに書き出します。
pi@raspberrypi:~/.ssh $ cat id_rsa.pub >> authorized_keys
pi@raspberrypi:~/.ssh $ cd ..
pi@raspberrypi:~ $ chmod 700 .ssh
pi@raspberrypi:~ $ chmod 600 .ssh/authorized_keys
ラズパイ側の鍵ファイルは不要なので、公開鍵、秘密鍵とも削除しておきます。
pi@raspberrypi ~ $ sudo rm id_rsa.pub
pi@raspberrypi ~ $ sudo rm id_rsa
ラズパイのSSHサーバにて公開鍵認証を使用するよう設定を変更します。
設定ファイルは、/etc/ssh/sshd_config です。
pi@raspberrypi ~ $ sudo nano /etc/ssh/sshd_config
SSHの既定の待ち受けポート番号は22番ポートですが、セキュリティ向上のため変更します。
ここでは28987番にしてみます。
以下、sshd_config ファイルの下記の記載を変更します。
#Port 22
Port 28987
rootログインを禁止します。
#PermitRootLogin prohibit-password
PermitRootLogin no
公開鍵ファイル認証を有効にします。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
パスワード認証を無効にします。
#PasswordAuthentication yes
PasswordAuthentication no
空パスワードを無効にします。
#PermitEmptyPasswords no
PermitEmptyPasswords no
SSHサーバーを再起動します。
pi@raspberrypi:~ $ sudo /etc/init.d/ssh restart
Restarting ssh (via systemctl): ssh.service.
これで、TeraTermから公開鍵を使用して接続できるようになりました。