known_hostsの使用
リモート・ホストに接続するたびに、リモート・ホスト上のSSHサーバーから公開キーが提供されます。 このキーを使用すると、中間者(MITM)攻撃を防ぐために、以降に同じホストに接続していることを確認できます。 サーバー側では、この公開キーはHostKeyペアの一部として格納されます。 クライアント・システムでは、known_hostsデータベースで、$HOME/.ssh/known_hostsファイルにホストの公開キーが格納されます。
リモート・システムからのSSHホストのキー・フィンガープリント
リモート・システムに接続したときに、known_hostsデータベースにキーが含まれていない場合は、クライアントによって、キーのフィンガープリントを受け入れるよう求めるプロンプトが表示されます。 たとえば:
The authenticity of host 'server1.example.com (198.51.100.172)' can't be established.
ED25519 key fingerprint is SHA256:i45KP8BeY5c6nO87hjUrqo1fXsGgQkCpA5dHchXBWbk.
Are you sure you want to continue connecting (yes/no/[fingerprint])?そのフィンガープリントを受け入れると、クライアント・システム上で$HOME/.ssh/known_hostsファイルにその公開キーが格納され、それ以降は、接続しようとしたときに再度プロンプトが表示されることはなくなります。
ローカルknown_hosts内のキー・フィンガープリントのリスト
known_hostsデータベースに格納されているキーのフィンガープリントを一覧表示するには、次を実行します。
ssh-keygen -l -f $HOME/.ssh/known_hostsStrictHostKeyChecking
OpenSSHクライアントでデフォルトでStrictHostKeyCheckingオプションが設定されている場合は、サーバーから返される公開キーが変わると、リモート・サーバーに接続できず、警告が表示されます:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ED25519 host key for server1.example.com has changed,
and the key for the corresponding IP address 198.51.100.172
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:20
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:qMBpuwP/LXLV8F5awaYtbXHO8v7LrqyY2BwVZk7tDxY.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/user/.ssh/known_hosts:125
ED25519 host key for server1.example.com has changed and you have requested strict checking.
Host key verification failed.ホスト・キーは変更されないため、この警告が表示された場合は、以前に接続したシステムと同じシステムに接続していない可能性があります。 ただし、リモート・システムが再インストールされた場合、OpenSSHサーバー・キーが再生成された場合、またはドメイン名エントリやIPアドレスが新しいシステムに再割当てされた場合など、正当な理由によってそのキーが異なることがあります。 そのような場合は、known_hostsデータベース内のそのシステムの既存のレコードを削除できます。
既存のキーの削除
リモート・サーバーによって提供された新しいキーを確実に信頼できる場合は、次を実行してknown_hostsデータベースから既存のキーを削除できます。
ssh-keygen -R server1.example.comDisabling StrictHostKeyChecking
サーバーが常に再インストールされるか置き換えられるテスト環境では、特定のホストに対してStrictHostKeyCheckingを無効にできます。 次のように、リモート・システムへの接続時にホスト・キー・チェックを無効にできます。
ssh -o StrictHostKeyChecking=no user@server1.example.com厳密なホスト・チェックを常に無効にする必要がある場合は、このオプションをクライアント構成のホスト・エントリに追加することを検討してください。 詳細は、ホストに関するSSHクライアント構成オプションの設定を参照してください。
中間者(MITM)攻撃を防ぐために、デフォルトで、厳密なホスト・キー・チェックが有効になっています。そのため、その機能を無効にすることは適切なセキュリティ対策とは考えられず、本番システムではお薦めできません。
関連トピック