リモートからLinuxサーバーに接続する方法として一般的なSSH接続では、デフォルトでパスワード認証でSSHサーバーに接続しますが、より安全に接続するなら鍵認証を使った方法がおすすめです。
そこでここでは、Linux上のSSHサーバーに公開鍵認証で接続できるようにするための設定手順を紹介します。
目次
SSHクライアントでの作業
まず、SSHクライアント側で、認証で必要となる公開鍵と秘密鍵のペアを作成し、公開鍵をSSHサーバーに登録します。
鍵ペアの作成
ここでは、RSAよりも強固でパフォーマンスが良い暗号方式(楕円曲線暗号)である「ed25519」を使って鍵ペアを作成します。
$ ssh-keygen -t ed25519
上のコマンドを実行すると、鍵ペアの保存ファイル名やパスフレーズを聞かれますが、既定値のまま[Enter]キーを押します。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hoge/.ssh/id_ed25519.
Your public key has been saved in /home/hoge/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:2FT3NxSN7D66/r+rv8OEVxL02Uj1NM+id7cFX++7v7o [email protected]
The key's randomart image is:
+--[ED25519 256]--+
| . .oo*=|
| . . o==B|
| . .=+O|
| + .o==|
| . S ..o.B|
| oo=+|
| .+o.|
| . o.|
| .oE*X@|
+----[SHA256]-----+
以上で、ユーザーのホームディレクトリ配下の「.ssh/」に以下の2つのファイルが生成されます。
- id_ed25519 ←秘密鍵
- id_ed25519.pub ←公開鍵
公開鍵をSSHサーバーに登録
次に、生成された公開鍵の内容を、SSHサーバーに接続するときのユーザーの「authorized_keys」ファイルに登録します。
SSHクライアントがLinuxの場合は「ssh-copy-id」コマンドを使って登録するのが簡単です。
$ ssh-copy-id -i <公開鍵ファイル> <ユーザー名>@<SSHサーバー名>
SSHクライアントがWindowsの場合は、PowerShellで以下のようにコマンドを実行して登録するとよいでしょう。
PS C:\> type <公開鍵ファイル> | ssh <ユーザー名>@<SSHサーバー名> "cat >> .ssh/authorized_keys"
動作確認
公開鍵を登録したら、SSHクライアントから秘密鍵を使ってSSHサーバーに接続できるか確認しておきます。
sshコマンドで鍵認証を使ってSSHサーバーに接続するときは、以下のようにコマンドを実行します。
$ ssh <ユーザー名>@<SSHサーバー名> -i <秘密鍵ファイル>
SSHサーバーでの作業
鍵認証で接続できることを確認したら、SSHサーバー側でパスワード認証でのSSH接続を無効化して安全性を高めます。
# vi /etc/ssh/sshd_config
PasswordAuthentication no
設定変更後、設定を適用するためにサービスを再起動します。
# systemctl restart sshd
以上で、パスワード認証でSSH接続できなくなります。
あとがき
インターネットに公開しているLinuxサーバーにSSH接続するなら、パスワード認証を無効化して、鍵認証を使って接続するように制限しておけば安心でしょう。