为什么我的 RSA 密钥在服务器上看起来与我尝试连接时看起来不同?

为什么我的 RSA 密钥在服务器上看起来与我尝试连接时看起来不同?

我尝试使用 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 -

相关内容