远程用户第一次尝试连接到我的 SFTP/SSH 服务器,使用 Mac OS X 下的“传输”客户端,发现主机密钥指纹与预期值不匹配。
我有显示指纹的屏幕截图,并将其与ssh-keygen -lf /etc/ssh/ssh_host_dsa_key
and的输出进行了比较,但它ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
与其中任何一个都不匹配。
我也没有成功地将指纹与 and 的输出进行比较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
因为似乎使用了不同的指纹算法?)。
客户端的消息框标题为(翻译成英文)
<主机名>的未知主机密钥
和状态
服务器未知。主机密钥的指纹是<16 个八位字节>。( 允许 ) ( 拒绝 ) [ ] 总是
所以没有迹象表明是否使用 RSA 或 DSA 密钥,或者是否使用 MD5 或某些 SHA 算法来创建指纹。
显示给远程用户的指纹有 16 个以冒号分隔的八位字节,因此它似乎没有使用 SHA-224 或更高版本。更新:我刚刚注意到即使是 SHA-1 哈希也会有 20 个八位字节,所以显示的指纹显然不是任何 SHA 格式。
连接最终会转到正确的服务器,因为如果用户允许连接,我可以在服务器日志中看到登录尝试。因此,似乎在客户端正确输入了主机名/IP。
与另一个(完全不相关的)SFTP 服务器的连接也显示不正确的指纹(但与第一个服务器的指纹不同)。
如果我尝试从其他主机(或从服务器本身本地)使用 OpenSSH 自己连接到服务器,则会显示正确的指纹(RSA 主机密钥的 MD5 指纹)。
该服务器使用标准 OpenSSH 服务器运行 Debian 6 LTS。
什么可能导致这种指纹不匹配?我该如何调试这个问题?
如果这是他们第一次连接,那么是否存在不匹配并不重要......客户端只是有一些不相关的旧条目恰好具有与其关联的相同主机名或 IP 地址。只需清除它:
做完之后,下次连接的时候肯定会说是RSA,ECDSA等。如果没有,请尝试使用适当的客户端,例如 Linux 上的标准 OpenBSD OpenSSH 客户端,或尝试 -v(或 -vvvv 等详细选项)。然后验证并接受新密钥。旧客户端的密钥指纹格式是 md5(新客户端是 sha256,采用一些奇怪的 base64 格式而不是 ascii-hex),而在服务器端获取指纹的正确方法是:
原来使用的 FTP 程序不是 Transmit,而是 Cyberduck 4.5.1。错误指纹的问题已被称为错误的主机密钥指纹。更新到最新版本解决了这个问题,现在显示的指纹是正确的。