我刚刚尝试通过 SSH 连接到一台服务器,我已经这样做了一段时间,没有任何问题,然后收到一条警告,称服务器的主机密钥已更改。
但事实却没有!
在服务器上,我检查了引用的主机密钥/etc/ssh/sshd_config
,它没有改变。
在客户端上,我检查了known_hosts
文件,其中的现有条目具有正确的公钥。我尝试暂时移开known_hosts文件,并将其设置为StrictHostKeyChecking
,以便它会自动连接,这样我就可以比较公钥。当我这样做并检查中的新条目时,公钥部分与之前相同!no
/etc/ssh/ssh_config
known_hosts
那么为什么它无法连接呢?唯一不同的known_hosts
是主机名的盐和哈希。但由于我一直都是通过 IP 和端口连接,而不使用主机名,所以这些肯定是正确的。
有任何想法吗?
请注意,所有尝试连接的客户端(之前已连接)都会收到此消息。因此,这不是客户端的问题。
编辑:我应该补充一点,当我使用StrictHostKeyChecking
设置为 进行连接no
并创建一个新known_hosts
文件时,当我尝试使用新known_hosts
文件再次连接并StrictHostKeyChecking
返回到 时yes
,它连接时没有任何警告。换句话说,新known_hosts
文件在没有警告的情况下工作,而旧文件却没有,尽管里面有相同的公钥。
答案1
您不应该为这个测试禁用主机密钥检查。当出现有关冲突的错误消息时,它会打印指纹,并像 David 所说的那样,告诉您 known_hosts 文件中哪个条目不匹配。
您可以将指纹与主机密钥进行比较;我不知道,但互联网搜索会告诉您。
类似ssh-keygen -l -f server-public-key.txt
[Linux表格]可以。
此外,使用 ssh -vv 并检查 /var/log/auth.log(或等效日志)应该会告诉您有关该问题的更多信息