この記事について
LPIC-102のセキュリティ分野における、sshの公開鍵認証の設定についてまとめる。
設定手順
公開鍵認証の場合、通常であれば認証のたびに秘密鍵のパスワード入力を求められる。ssh-agentによる認証では、認証におけるパスワード入力のプロセスをカットできる。
認証方式を公開鍵認証に設定(サーバー)
- /etc/ssh/sshd_config をエディタで開く
[root@localhost ~]# vi /etc/ssh/sshd_config
2.以下行のコメントアウトを外し、値を「yes」にする
PubkeyAuthentication yes
3.sshdの再起動を行う
[root@localhost ~]# systemctl restart sshd
鍵ペアの作成(クライアント)
- ssh-keygenコマンドを実行し、公開鍵と秘密鍵のペアを作成する
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:oiLCbH8bddiR+dOsgmmwT2ohL0YpbQpMWX7P1y6oVDs root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
| |
| . o |
| + + |
| o . . o o o |
|o . o.++So.o o |
|+o * o=+=. .o |
|++* ++.Eo... |
|oo.+.+*..... |
| ..++o. . |
+----[SHA256]-----+
ssh-agentの設定に必要になるため、必ず任意のパスワードを設定する
2.ホームディレクトリの.ssh/
配下に公開鍵と秘密鍵のペアが作成されたことを確認する
[root@localhost ~]# ll ~/.ssh/
合計 8
-rw------- 1 root root 2655 4月 10 15:46 id_rsa
-rw-r--r-- 1 root root 580 4月 10 15:46 id_rsa.pub
サーバーに公開鍵を配布
- どうにかして、クライアント側で作成した公開鍵を、サーバーに配布する。
メディア経由による配布が理想のよう。
注意しなければならないのは、他方へ鍵を渡す際の方法です。 暗号化されていないネットワーク上をFTP やメールなどで渡すのは最も危険であり、暗号化されているSCP やSFTP の利用も望ましいものではありません。 鍵を渡す際には、ネットワークを一切経由しないメディア経由が最も安全です。 但し、鍵を渡した後にメディア(FD など)を紛失したならば意味はありませんので、メディア内の鍵を厳重に保管するなどの対策が必要です。
参考:鍵配布の注意点
2.どうにかして、サーバーに配布した公開鍵を~/.ssh/authorized_keys
としてコピーする
ssh-agentの設定(クライアント)
- ssh-agentを起動する
ssh-agent bash
ssh-agentコマンドをそのまま実行すると、サービスに必要な環境変数を表示する。引数にシェルを指定することで、子シェルのスコープ内でのみ必要な環境変数が定義される。子シェルが終了すると、ssh-agentは停止し環境変数の設定も消える。
2.ssh-agentの環境変数を確認する
[root@localhost ~]# ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-2Eefr3kjLdQ4/agent.5739; export SSH_AUTH_SOCK;
SSH_AGENT_PID=5740; export SSH_AGENT_PID;
echo Agent pid 5740;
SSH_AUTH_SOCK:ssh-agentとssh-add&sshのプロセス間インターフェースが定義されている
SSH_AGENT_PID:ssh-agentが起動してる子シェルのプロセスID
3.ssh-addコマンドでssh-agentに秘密鍵の登録を行う
鍵ペアをデフォルトパスで指定しているので、オプションは必要ない
[root@localhost .ssh]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (root@localhost.localdomain)
4.登録した秘密鍵を確認する
[root@localhost .ssh]# ssh-add -l
3072 SHA256:oiLCbH8bddiR+dOsgmmwT2ohL0YpbQpMWX7P1y6oVDs root@localhost.localdomain (RSA)
ssh接続
- sshコマンドでクライアントからサーバーにssh接続を行う
接続をするか否か問われるが、yes
で問題ない
[root@localhost .ssh]# ssh root@10.2.149.12 cat ~/.ssh/authorized_keys
The authenticity of host '10.2.149.12 (10.2.149.12)' can't be established.
ECDSA key fingerprint is SHA256:HdTXkO5LG3T53IYrNLpWe5oXk2gSJDuFyyTrGMstKTc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.2.149.12' (ECDSA) to the list of known hosts.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtW5Ucl1BjAi3HGgs+IJr/aq4pCDARQxN/54VKeEwL1NJaGH6Q06RKVnj+8LvfYyKeXpKjTDtX7IWUZmQ3m9rCLwcqGdpAPFQoUgef3OUdEplnAxL3Gp1zQrhkRC7bfBS3ytsDHmD4FeZSyvJq3NGTOtTHSDPsLILZM2WY3XPHNa1a8m8nGknmqMVT2eOY2dtqlQuZQzfynNml45fQh0YwVTiNTjc5Yu+WZBSUHcTbFTbBhyTklX/BKVHdV/1/+F1PRjMLyQOI5KAM1c39dQP6NOPHKWvCaNANi9m2Dttdtl9s6ctjaQuczQX8yofrFXtsrisEVfX6Zm7id6zfPmbt9gZdO4KiwEMlFMq32ZURDoCbShoHoVlRdIJdpBNoYN1BhKKPAHCgMjeFXnGFfcdaNXlegYbajvJ0jMbxnxytUUEY39kYFcPSCS0mqF11nGeL7+1XIz99F+nzGLLjPrHBqwkq6BTRKlOHD/wgz2+x2Gd/bkN72U1CQHdADvdnLrk= root@localhost.localdomain
ssh接続時、sshサーバーはクライアントに自身の公開鍵を送信する。クライアントは、受け取った公開鍵と~/.ssh/known_hostsファイルに格納されているsshサーバーの公開鍵を比べることで、正しいホストかどうかを検証する。今回は初めての接続であり、~/.ssh/known_hostsファイルに接続先sshサーバーの公開鍵が格納されていなかったことが原因でwarが表示されている。
参考:当エラーについて
2.再接続してみる
ssh-agentにより、秘密鍵のパスフレーズを入力せずにログインができた、以上。
[root@localhost .ssh]# ssh root@10.2.149.12
Last login: Thu Apr 10 15:04:43 2025 from 10.0.15.101