CentOSにリモートからログインする際に、パスワードを使用しておりました。
パスワードから鍵認証への変更を行いたいとの要望を頂いて、手順についてを自分なりにまとめたのでこちらに記載します。
まず、鍵の作成はクライアント側で実施する必要があります。
ssh-keygenコマンドで鍵の作成を行う事が出来ます。今回は純粋な検証なので、暗号化方式等のオプションは指定しておりません。また、パスフレーズも設定しておりません。
man ssh-keygenコマンドの一部の結果だけ載せておきますね。下記オプションはちょくちょく使います。
-t dsa | ecdsa | ed25519 | rsa | rsa1
Specifies the type of key to create. The possible values are
“rsa1” for protocol version 1 and “dsa”, “ecdsa”, “ed25519”, or
“rsa” for protocol version 2.
-b bits
Specifies the number of bits in the key to create. For RSA keys,
the minimum size is 1024 bits and the default is 2048 bits. Gen‐
erally, 2048 bits is considered sufficient. DSA keys must be
exactly 1024 bits as specified by FIPS 186-2. For ECDSA keys,
the -b flag determines the key length by selecting from one of
three elliptic curve sizes: 256, 384 or 521 bits. Attempting to
use bit lengths other than these three values for ECDSA keys will
fail. Ed25519 keys have a fixed length and the -b flag will be
ignored.
ssh-keygenコマンド実施後に、ホームディレクトリ内に.sshフォルダが作成されます。
ll -aコマンドで作成されている事を確認します。また、.sshフォルダ内にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成されている事も確認します。
[test_test@localhost ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test_test/.ssh/id_rsa):
Created directory '/home/test_test/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test_test/.ssh/id_rsa.
Your public key has been saved in /home/test_test/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:l2IFyxNaNfOba8YIrxXmpciJCmH4GDLGZc+WspSmPNg test_test@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| +.+ |
| + + + |
| o . + . . |
|..o + . o . o |
|=oo= = S = + |
|=B+.+ + X * . |
|o+E. . + * = |
| .. . o o |
| . . |
+----[SHA256]-----+
[test_test@localhost ~]$ ll -a
合計 16
drwx------. 3 test_test test_test 95 7月 7 12:05 .
drwxr-xr-x. 4 root root 38 7月 4 22:48 ..
-rw-------. 1 test_test test_test 51 7月 4 22:59 .bash_history
-rw-r--r--. 1 test_test test_test 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 test_test test_test 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 test_test test_test 231 4月 1 2020 .bashrc
drwx------. 2 test_test test_test 38 7月 7 12:05 .ssh
[test_test@localhost ~]$ ll .ssh
合計 8
-rw-------. 1 test_test test_test 1679 7月 7 12:05 id_rsa
-rw-r--r--. 1 test_test test_test 413 7月 7 12:05 id_rsa.pub
作成された公開鍵をログインの対象となるサーバに配置します。
方法は色々あると思いますが、ssh-copy-idコマンドで配置する方法とscpコマンドで配置する方法の2パターンを紹介します。
ssh-copy-idコマンドはかなり簡単です。
クライアント側で、ssh-copy-id "ユーザ名"@"IPアドレス" を実施します。これで、サーバ側に公開鍵が配置されます。
上記コマンド実施後に、サーバ側に公開鍵が配置されているかの確認を行います。ssh-copy-idコマンドで指定したユーザのホームディレクトリ配下に.sshディレクトリが作成されている事を確認します。さらに、その配下にauthorized_keysファイルが作成されている事も確認します。authorized_keysには公開鍵の情報が登録されています。問題が発生していない場合は、これだけで秘密鍵のログインでの行う事が可能です。
#クライアント側
[test_test@localhost ~]$ ssh-copy-id test_01@IPアドレス
#サーバ側
[root@localhost test_01]# ll -a
合計 16
drwx------. 3 test_01 test_01 95 7月 7 22:52 .
drwxr-xr-x. 4 root root 38 7月 4 21:05 ..
-rw-------. 1 test_01 test_01 230 7月 7 22:44 .bash_history
-rw-r--r--. 1 test_01 test_01 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 test_01 test_01 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 test_01 test_01 231 4月 1 2020 .bashrc
drwx------. 2 test_01 test_01 29 7月 7 22:52 .ssh
[root@localhost .ssh]# ll
合計 4
-rw-------. 1 test_01 test_01 413 7月 7 22:52 authorized_keys
もう一つの方法では、若干手順が増えます。
基本はssh-copy-idコマンドでよいと思いますが、記載致します。
scpコマンドで公開鍵をサーバーに送ります。
余談ですが、公開鍵をauthorized_keysファイルを登録する際に権限回りの設定を誤り、秘密鍵でのログインが行えない事が多々あります。なので、ログイン出来ない場合はとりあえず権限回りを確認する事をお勧めします。
所有者/グループをtest_01としたいので、スイッチします。
mkdirコマンドで、.sshディレクトリを作成。アクセス権限も700にします。
id_rsa.pubファイルの中身を、authorized_keysに追記します。アクセス権限は600にします。本番なりお客様環境であれば、追記する前にバックアップを取っておいてください。
これで、秘密鍵でのログインが可能となります。
#クライアント側
[test_test@localhost ~]$ scp .ssh/id_rsa.pub test_01@IPアドレス:/home/test_01
test_01@IPアドレス's password:
id_rsa.pub 100% 413 379.1KB/s 00:00
#サーバ側
[root@localhost test_01]# ll -a
合計 20
drwx------. 2 test_01 test_01 101 7月 7 23:13 .
drwxr-xr-x. 4 root root 38 7月 4 21:05 ..
-rw-------. 1 test_01 test_01 235 7月 7 23:06 .bash_history
-rw-r--r--. 1 test_01 test_01 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 test_01 test_01 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 test_01 test_01 231 4月 1 2020 .bashrc
-rw-r--r--. 1 test_01 test_01 413 7月 7 23:13 id_rsa.pub
[root@localhost test_01]# su - test_01
[test_01@localhost ~]$
[test_01@localhost ~]$ mkdir .ssh | chmod 700 .ssh
[test_01@localhost ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[test_01@localhost ~]$ chmod 600 .ssh/authorized_keys
今後はパスワードでのログインは行えないようにしたいとの事だったので、sshd_configを編集します。
PasswordAuthentication yes → PasswordAuthentication no に変更すると、パスワードでのログインが不可となります。
設定反映のために、sshdサービスの再起動も忘れずに行います。
登録後のid_rsa.pub(公開鍵)については、削除しても問題ありません。
参考になれば、幸いです。