我尝试使用 PuTTY(特别是 SCP)从 Windows 连接到我的 Linux 服务器。当我第一次尝试连接时,就像我尝试从任何新机器连接时一样,我收到一条警告,提示我连接到“未知服务器”并将其密钥添加到我的缓存中。
在 Windows 中,它显示“服务器的 rsa2 密钥指纹是:”,然后提供如下内容:
0a:34:a3:43:af (etc)
为了验证这一点,我ssh
将服务器更改为/etc/ssh/
并运行:
for file in *sa_key.pub; do ssh-keygen -lf $file; done
打印出我所有文件的指纹。
输出看起来完全不同,更像这样:
2048 SHA256:ZAGZABCSD4+abcfe5ffff344444fff32323 ssh_host_rsa_key.pub
换句话说,根本不是一个冒号分隔的数字列表。有人能告诉我其中的区别吗,以及如何找到指纹的正确冒号分隔值列表?
答案1
openssh 的某些部分使用 MD5 哈希,而某些部分使用 SHA256 哈希。就您而言,您的客户端似乎提供了 md5 哈希,而您的服务器 ssh-keygen 使用的是 SHA256。
您可以自己计算哈希值。如果您从 .pub 文件中获取主机密钥,它看起来像这样,省略号替换了许多字符:
AAAAB3[...]==
然后你可以自己做哈希:
md5:
echo "AAAAB3[...]==" | base64 -d | md5sum
679e19234b295ee432a3920c30fda6ac
沙:
echo "AAAAB3[...]==" | base64 -d | sha1sum
41a53770303a0776a1378239e2ee0fd825705c74
答案2
虽然这是 2019 年 7 月以前的版本,但以防万一有人遇到同样的问题,在 Windows 上使用 Putty 时,服务器主机密钥指纹是以 md5 格式绘制的(如 OP 所述,用冒号分隔)
因此,在具有终端访问权限的 Linux OpenSSH 主机上,您可以使用以下命令检查 ssh_host 密钥指纹:
采用 md5 格式
ssh-keyscan localhost | ssh-keygen -l -E md5 -f -
或 SHA256 格式
ssh-keyscan localhost | ssh-keygen -l -E SHA256 -f -
或使用视觉 ASCII 艺术表示法
ssh-keyscan localhost | ssh-keygen -l -v -f -