什么可能导致SFTP主机密钥指纹不匹配?

远程用户第一次尝试连接到我的SFTP / SSH服务器,使用Mac OS X下的“Transmit”客户端,发现主机密钥指纹与期望值不符。

我有一个显示指纹的屏幕截图,并将其与ssh-keygen -lf /etc/ssh/ssh_host_dsa_keyssh-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_dsa_key.pub | base64 -d | sha1sum cut -d ' ' -f 2 < /etc/ssh/ssh_host_dsa_key.pub | base64 -d | sha1sum cut -d ' ' -f 2 < /etc/ssh/ssh_host_dsa_key.pub | base64 -d | sha1sumcut -d ' ' -f 2 < /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha1sum cut -d ' ' -f 2 < /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha1sum cut -d ' ' -f 2 < /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha1sum (因为它似乎有使用不同的指纹algorithm?)。

客户端的消息框标题为(翻译成英文)

<主机名>的未知主机密钥

和状态

服务器是未知的。 主机密钥的指纹是<16个八比特组> 。 (允许)(拒绝)[]总是

所以没有指示是使用RSA还是DSA密钥,或者是否使用MD5或SHAalgorithm来创build指纹。

显示给远程用户的指纹具有16个以冒号分隔的八位字节,所以它看起来并不使用SHA-224或其他更高级别的字符。 更新 :我刚刚注意到,即使一个SHA-1哈希将有20个八位字节,所以显示的指纹显然不是任何SHA格式。

连接最终到达正确的服务器,因为如果用户允许连接,我可以在服务器日志中看到login尝试。 所以看起来主机名/ IP在客户端input正确。

与另一个(完全不相关的)SFTP服务器的连接也显示不正确的指纹(但与第一个服务器不同)。

如果我尝试使用OpenSSH从其他主机(或本地服务器本身)连接到服务器,则会显示正确的指纹(RSA主机密钥的MD5指纹)。

服务器使用标准的OpenSSH服务器运行Debian 6 LTS。

什么可能导致这种指纹不匹配? 我怎样才能debugging这个问题?

如果这是他们第一次连接,那么是否有不匹配的问题并不重要…客户端只是有一些不相关的旧条目碰巧有相同的主机名或IP地址相关联。 只需清除它:

 ssh-keygen -R $name_or_ip 

你这样做之后,下次连接的时候肯定会说RSA,ECDSA等。 如果没有,请尝试使用适当的客户端,如Linux上标准的OpenBSD OpenSSH客户端,或者尝试使用-v(或-vvvv等详细选项)。 然后validation并接受新密钥。 老客户端的密钥指纹格式是md5(新的是sha256,一些奇怪的base64格式,而不是ascii-hex),在服务器端获取指纹的正确方法是:

 ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key 

原来使用的FTP程序不是Transmit,而是Cyber​​duck 4.5.1。 指纹错误的问题已经被称为错误的主机密钥指纹 。 更新到最新版本解决了这个问题,并且显示的指纹现在是正确的。