远程用户首次尝试使用 Mac OS X 下的“Transmit”客户端连接到我的 SFTP/SSH 服务器,发现主机密钥指纹与预期值不匹配。
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
(因为似乎使用了不同的指纹算法?)。
客户端消息框的标题为(翻译成英文)
未知主机密钥< 主机名 >
和州
服务器未知。主机密钥的指纹是< 16 个八位字节 >. ( 允许 ) ( 拒绝 ) [ ] 始终
因此没有迹象表明是否使用了 RSA 或 DSA 密钥,或者是否使用 MD5 或某些 SHA 算法来创建指纹。
显示给远程用户的指纹有 16 个以冒号分隔的八位字节,因此它似乎没有使用 SHA-224 或更高版本的加密。更新:我刚刚注意到,即使是 SHA-1 哈希也会有 20 个八位字节,因此显示的指纹显然不是任何 SHA 格式。
连接最终转到正确的服务器,因为如果用户允许连接,我可以在服务器日志中看到登录尝试。因此,看来客户端正确输入了主机名/IP。
与另一个(完全不相关的)SFTP 服务器的连接也显示不正确的指纹(但与第一个服务器的指纹不同)。
如果我尝试从其他主机(或从服务器本身本地)使用 OpenSSH 自己连接到服务器,我会看到正确的指纹(RSA 主机密钥的 MD5 指纹)。
该服务器运行带有标准 OpenSSH 服务器的 Debian 6 LTS。
什么原因导致指纹不匹配?我该如何调试此问题?
答案1
如果这是他们第一次连接,那么不匹配也没关系……客户端只是有一些不相关的旧条目,碰巧有相同的主机名或 IP 地址与之关联。只需使用以下命令清除它:
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
答案2
原来使用的 FTP 程序不是 Transmit,而是 Cyberduck 4.5.1。错误指纹的问题已经被称为主机密钥指纹错误。更新到最新版本已经修复该问题,显示的指纹现在是正确的。