关于此选项有很多讨论,大多数人认为“它提高了安全性”、“它可以保护您免受 MiTM 攻击/DNS 欺骗”等,但我不明白这是怎么回事。ssh_config(5)
说这个选项
允许 ssh 检测主机密钥是否因 DNS 欺骗而更改
但它仍然显得模糊甚至误导,因为
由于文档含糊不清,其他人甚至似乎认为CheckHostIP=yes
不会让您连接到已更改 IP 的主机(即它的 IP 与已记录的 IP 不同known_hosts
),这是完全不真实的,位于至少据我自己的测试可以理解。
CheckHostIP=yes
当我(默认)连接到主机密钥已存储在 中known_hosts
但已更改其 IP 的远程服务器时,连接正常进行,但我收到警告:
永久添加 IP 地址的 ECDSA 主机密钥 [......]
另外,还会在 中添加一个新行known_hosts
,其中包含服务器的主机密钥(未更改)和新的 IP 地址(不同)。如果主机稍后再次更改其 IP,则下次我使用 来连接它时CheckHostIP=yes
,将附加一个新行,known_hosts
依此类推。
如果我连接CheckHostIP=no
到已更改其 IP 地址的服务器,连接将继续(这也是 发生的情况CheckHostIP=yes
),但这次没有警告或在 中附加新行known_hosts
。
yes
因此,和之间的唯一区别no
似乎是连接时的简单一行警告,以及known_hosts
每次主机更改其 IP 时记录新地址(有效地保留服务器不同 IP 的历史记录)。
如果是这样的话,我什至不确定这CheckHostIP=yes
比 …