(注:これは 既存の質問 に似ているようですが、ここでの実装の詳細にはいくつかの違いがあると思います)
1つのDNSアドレスの背後に数百のホストがあります。各ホストには独自の個別のホストキーがあります(変更することはできません。ベンダーによって設定されているため、変更しないでください)。
もう一度単一の名前でホストに接続しようとすると、当然のことながらssh
が非常に混乱します。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The DSA Host key for (hostname) has changed,
and the key for the corresponding IP address 192.168.0.100
is unknown. 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.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 DSA key sent by the remote Host is
SHA256:+38sJSsANknk6vVIHJ/l/xnPCl+ALCNrbi80vrr24cM.
Please contact your system administrator.
Add correct Host key in /Users/me/.ssh/known_hosts to get rid of this message.
Offending DSA key in /Users/me/.ssh/known_hosts:291
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
X11 forwarding is disabled to avoid man-in-the-middle attacks.
Permission denied (publickey,password,keyboard-interactive).
この環境でSSHを安全に使用するための(つまり、可能な限り多くの検証をそのままにして)ベストプラクティスは何でしょうか?
セキュリティ上の理由からキー検証を無効にしたくありません。単一のIPアドレスに接続するという明らかな回避策は、ベンダーのDNS実装によって提供される負荷分散を回避します。
known_hosts
を使用して、すべてのIPに対してssh-keyscan
を事前生成できます。次に、ユーザーシステムでGlobalKnownHostsFile
(読み取り専用)として設定し、その特定のhostname
に対してUserKnownHostsFile
を無効にします(/dev/null
に設定)。
私はそれを試しませんでしたが、IPに満足し、hostname
でknown_hosts
レコードを書き込めない場合は満足するはずです。
クライアントの例/etc/ssh/ssh_config
(配布するのも良い):
[...] # other stuff
Host dns_hostname
GlobalKnownHostsFile /etc/ssh/known_hosts
UserKnownHostsFile /dev/null