我有显示指纹的屏幕截图,并将其与ssh-keygen -lf / etc / ssh / ssh_host_dsa_key和ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub的输出进行了比较,并且它与这些.
我还没有成功地将指纹与cut -d” – f 2<的输出进行比较. /etc/ssh/ssh_host_dsa_key.pub | base64 -d | sha1sum和cut -d'' - f 2< /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha1sum(因为似乎有不同的指纹识别算法在使用?). 客户端的消息框标题为(翻译成英文)
Unknown host key for < hostname >
和州
The server is unknown. The fingerprint of the host key is < 16 octets >. ( Allow ) ( Deny ) [ ] Always
因此,没有指示是使用RSA还是DSA密钥,或者是否使用MD5或某些SHA算法来创建指纹.
显示给远程用户的指纹有16个以冒号分隔的八位字节,因此它似乎不使用SHA-224或更高的值.更新:我刚刚注意到即使SHA-1哈希也会有20个八位字节,因此显示的指纹显然不是任何SHA格式.
连接最终会转到正确的服务器,因为如果用户允许连接,我可以在我的服务器日志中看到登录尝试.因此,似乎在客户端正确输入了主机名/ IP.
与另一个(完全不相关的)SFTP服务器的连接也显示不正确的指纹(但与第一个服务器不同).
如果我尝试使用OpenSSH从其他主机(或本地服务器本身)连接到服务器,我会看到正确的指纹(RSA主机密钥的MD5指纹).
服务器使用标准的OpenSSH服务器运行Debian 6 LTS.
什么可能导致这种指纹不匹配?我该如何调试这个问题?
解决方法
ssh-keygen -R $name_or_ip
在你这样做之后,它应该在你下次连接时说出它是RSA,ECDSA等.如果没有,尝试使用适当的客户端,如Linux上标准的OpenBSD OpenSSH客户端,或尝试-v(或-vvvv等详细选项).然后验证并接受新密钥.旧客户端的密钥指纹格式是md5(新的是sha256,有些奇怪的base64格式而不是ascii-hex),在服务器端获取指纹的正确方法是:
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key