中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【CentOS】SSH公開鍵認証の設定をして、秘密鍵でログインする

1.概要

LinuxサーバーのメンテナンスにSSHを使うことが多いと思いますが
デフォルトの設定だと、パスワード認証の為セキュリティーが高いとは言い難いです。

今回は秘密鍵と公開鍵を組み合わせた【SSH公開鍵認証方式】の設定をしてみます。

2.鍵ペアの作成

まずは下記のコマンドで鍵のペアを作成します。
途中でパスワードを聞かれますので、必要に応じて設定します。
設定しなくてもOKですがパスワードを設定するとより強固なセキュリティーになります。
鍵は暗号化方式が【RSA】で鍵長が【4096】にしました。

[root@localhost ~]# ssh-keygen -t rsa -b 4096 -f test_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in test_key.
Your public key has been saved in test_key.pub.
The key fingerprint is:
SHA256:vTKmnN49NZVBGoZDyZ2+tdwXGPyTC2mR6yVqXFPsJpU root@localhost
The key's randomart image is:
+---[RSA 4096]----+
|         o.++o+ .|
|          =.oB.E |
|           o. @o.|
|         .  .@+O |
|        S o ==Bo+|
|           =+.o.o|
|        + o. .  .|
|     . = +.      |
|     .= . ..     |
+----[SHA256]-----+

3.公開鍵の登録

サーバーに公開鍵を登録します。

まずは公開鍵を配置するためのディレクトリを作成します。

[root@localhost ~]# mkdir .ssh

このディレクトリ名は固定となってます。
次にディレクトリのパーミッションを【700】に設定します。

[root@localhost ssh]# chmod 700 .ssh

先程作成した公開鍵を使用できるようにします。

[root@localhost ~]# cat test_key.pub >> .ssh/authorized_keys

【authorized_keys】パーミッションを【600】に設定します。

[root@localhost ~]# chmod 600 .ssh/authorized_keys

公開鍵を削除します。

[root@localhost ~]# rm test_key.pub
rm: remove regular file ‘test_key.pub’? 

鍵認証でログインできるように【sshd_config】を編集します。

[root@localhost ~]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes

sshdを再起動します。

[root@localhost ~]# systemctl restart sshd.service

4.秘密鍵の取得

作成した秘密鍵をクライアント側へ転送します。
今回は【tera term】の機能を使って取得します。

【ファイル】→【SSH SCP】をクリックします。
f:id:tsu--kun:20190709142421p:plain

【FROM:】に先程作成した【test_key】と入力し【Receive】をクリック
f:id:tsu--kun:20190709142603p:plain

これで秘密鍵を取り出すことが出来ました。
取り出したので秘密鍵は削除しておきます。

[root@localhost ~]# rm test_key
rm: remove regular file ‘test_key’? 

5.SSH鍵認証で接続してみる

【tera term】を起動し【SSH認証画面】で
【RSA/DSA/ECDSA/ED25519鍵を使う】を選択し秘密鍵に先程作成した秘密鍵を選択します。
【ユーザー名】は【root】
パスフレーズに鍵ペアを作成した時のパスワードを入力し【OK】をクリックします。
f:id:tsu--kun:20190709142711p:plain

これで設定に問題がなければ公開鍵認証方式のSSH接続は完了です。

6.パスワード認証でのSSH接続を禁止にする

[root@localhost ~]# vi /etc/ssh/sshd_config
PasswordAuthentication no

sshdを再起動します。

[root@localhost ~]# systemctl restart sshd.service

これでパスワード認証が無効化されました。