Raspberry Pi OSのSSHログインを公開鍵認証に変更する手順

Raspberry Pi

約 7 分で読めます。



ここに来た皆さんならご存知の通り、通常SSHのログインはパスワード認証ですが、公開鍵認証にすると、秘密鍵を持っている人のみがログインできるため、なりすましを回避できます!
 秘密鍵を盗まれない限りは。

Raspberry Pi 4で公開鍵認証に変更しましたので、その手順を載せておきます。

鍵ペアの作成と設置

まずRaspberry PiにSSHでログインしたい端末にログインし、以下コマンドを実行します。
 自分はChromebookのLinuxで実施。

# 公開鍵と秘密鍵のペアを作成する
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yasu/.ssh/id_rsa): (そのままEnter)
Enter passphrase (empty for no passphrase): (パスフレーズを入力)
Enter same passphrase again: (もう一度同じパスフレーズを入力)
Your identification has been saved in /home/yasu/.ssh/id_rsa.
Your public key has been saved in /home/yasu/.ssh/id_rsa.pub.
The key fingerprint is:
(略)



パスフレーズはなくてもいいですが、あるとよりセキュリティが強固になります。
面倒でも設定しておきましょう。

お次は作った公開鍵の方をRaspberry Piに送ります。
ここではscpコマンドで送信。

# scpコマンドで公開鍵ファイルをRaspberry Piに送信
# scp <送信したいファイルパス> <ユーザー名>@<送信先ホスト名もしくはIPアドレス>:<送信先ファイルパス>
scp .ssh/id_rsa.pub yasu@192.168.1.123:/home/yasu/
yasu@192.168.1.123's password:
id_rsa.pub



送信できたか一応確認します。
Raspberry PiにSSHログインしてlsで確認。

$ ls -l
total 4
-rw-r--r-- 1 yasu yasu 394 Nov 11 13:39 id_rsa.pub



この公開鍵をopensshが認識できるようにします。

# 公開鍵を.sshに移動する
$ mv id_rsa.pub .ssh/
# authorized_keysに結合する
$ chmod 700 .ssh
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
# 結合したらもとの公開鍵ファイルは要らないので消す
$ rm .ssh/id_rsa.pub
2022/05/30追記
.sshがroot:rootで作られている場合、↑のコマンドではPermission deniedになります。
その場合は↑を実行する前に↓のコマンドで一般ユーザー権限に戻しておきましょう。
sudo chown -R yasu:yasu /home/yasu/.ssh/
※yasuはご自身で作成されたユーザー名に置き換えてください。

opensshの設定変更

お次はopensshの設定ファイルを編集します。

# opensshの設定を編集する
$ sudo vim /etc/ssh/sshd_config
Port 12345 # ポートをデフォルトの22から変えておく
PermitRootLogin no # rootのログインを拒否
PermitEmptyPasswords no # 空パスワードを拒否

# opensshを再起動する
$ sudo service openssh restart



一応ここまでの設定変更により公開鍵認証でログインできるか確認しておきます。
パスフレーズを入れてログインできればOKです。

$ ssh yasu@192.168.1.123 -p 12345
Enter passphrase for key '/home/yasu/.ssh/id_rsa':



最後です。
パスワード認証を無効にします。
これをやってopensshが再起動するとパスワードによるログインができなくなります!
秘密鍵ファイルをなくしてしまうと、PCとディスプレイ/キーボードを接続してのログインしかできあんくなるので、注意!

$ sudo vim /etc/ssh/sshd_config
PasswordAuthentication no

# opensshを再起動
$ sudo service openssh restart



↑をやった後に、秘密鍵が配置されているPCでSSHログインできていれば成功です!

終わりに

いかがでしたか。

パスワードは漏れてしまう可能性が至る場面でありますが、秘密鍵はそう簡単に漏れないので、安全性が高まります!

↓のページには、Raspberry Pi 4をnextcloudサーバーとしてクラウドストレージとして動かすまでを各ステップ順を追って説明しています!
こちらも合わせてどうぞ!

Comments

  1. 1321 より:

    上記の設定だけだと不十分な場合があります。
    私の環境の場合、raspberrypi側で”.ssh”ディレクトリを作成しましたが、所有者が”root”になっていたため、うまく動作しませんでした。なので、一通り上記の作業が終わったら、”.ssh”と”.ssh/authorized_keys”の所有者をユーザーに変更したところログインできました。

    • yatch より:

      コメントありがとうございます。

      手元のRaspberryPiでadduser yasuした直後ですと.sshディレクトリがありませんでした。
      その後、mkdir .sshで作成するとyasu:yasu権限で.sshディレクトリができました。

      そのため、1321さんの環境では.sshをsudo付き、あるいはsu rootした状態で作成された可能性がありそうです。

      ただ、別の訪問者が同様の現象にぶつかる可能性もありますので、コメント付け加えようと思います。
      ご指摘ありがとうございました。

タイトルとURLをコピーしました