当同一 LAN 中的多个ssh
服务器使用 DHCP 时,它们的 IP 地址可能会发生变化。每当他们有一个新地址(即:他们以前在该 LAN 中从未有过的地址)时,就会出现以下消息:
The authenticity of host '192.168.1.x (192.168.1.x)' can't be established.
ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?
如果我说yes
,那个指纹将是永久与该地址相关。但是,当不同的ssh
服务器为 192.168.1.x 时,它将具有不同的指纹并出现强烈警告。
服务器和客户端都运行 Ubuntu 14.04,并进行了最新更新。我信任服务器,因为我可以物理访问它,即使它的地址发生了变化,我也知道它的真实性。
1)同一台服务器是否有可能定期更改其密钥指纹?
2)有没有办法抑制指纹检查仅有的对于本地地址,范围是 192.168.1.1-254?
答案1
〜/ .ssh /配置:
host 192.168.1.*
CheckHostIP no
StrictHostKeyChecking no
答案2
1)同一台服务器是否有可能定期更改其密钥指纹?
是的,理论上该服务器的管理员可以随时更改服务器密钥。然而,这会破坏已建立的信任,因此在实践中不应无缘无故地这样做。
如果重建服务器(没有保留 ssh 服务器密钥的新硬件,或者来自轨道的核武器场景),则可能会发生这种情况。如果有多个具有不同密钥的服务器使用相同的主机名(例如在负载平衡器后面),也可能会发生这种情况。
此外,ssh 服务器通常具有多个不同类型的主机密钥(rsa、dsa、ecdsa、ed25519...),因此在使用一个客户端时,与使用另一客户端相比,您可能会看到不同的密钥指纹,具体取决于协商的密钥交换。但是,如果客户端和服务器配置均未更改,则任何给定客户端应始终从服务器获取相同的密钥。
2)有没有办法只对本地地址(192.168.1.1-254范围内)抑制指纹检查
是的。来自ssh_config 手册页,选项CheckHostIP
并StrictHostKeyChecking
影响此行为。要取消对所有以“192.168.1.”开头并后跟一到三个字符的主机名的这些检查,请使用
Host 192.168.1.?,192.168.1.??,192.168.1.???
CheckHostIP no
StrictHostKeyChecking no
请注意,图案子句中支持的Host
不是完整的正则表达式或 shell glob,但是字符串匹配仅包含单个字符?
和贪婪*
通配符。因此,如果有人成功注册1.com
,那么该模式也将与远程服务器匹配192.168.1.com
。
使用贪婪的 glob 可以使配置子句更简单Host 192.168.1.*
,但也允许匹配更广泛的混合字母数字名称,例如192.168.1.evil.qwerty.org
.这机会无意中连接(没有主机密钥验证)到此类服务器的概率非常低;然而,值得注意的是,这只是一个字符串 glob,而不是必然被解析为子网地址的东西,只是因为它看起来有点像子网地址。