1

当我们 ssh 到一个主机时,他要么是已知的,要么是未知的。在后一种情况下,在我们第一次尝试连接时,系统会提示我们

无法确定主机'13x.8x.xx.1x1(13x.8x.xx.1x1)'的真实性。RSA 密钥指纹为 xx:xx:xx:xx:xx:26:86:80:5f:17:xx:xx:xx:xx:6d:6c。您确定要继续连接(是/否)?是的

然后服务器的 RSA 公钥存储在 .ssh/know_hosts 文件中。它是如何编码的?我们如何确保这不是中间人?最后,这个所谓的“主机密钥”是不对称的。这是什么意思?

4

1 回答 1

2

我们如何确保这不是中间人?

第一次,您可以检查 RSA 指纹。有人需要事先与您沟通,或者您需要以某种方式安全地接收它(即通过 https 站点发布,或通过签名的电子邮件接收)。例如,许多托管服务提供商会向您发送您的主机 SSH 指纹。

在 Ubuntu 上,您可以使用以下命令找到自己的 RSA 指纹:

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

请注意,还有其他使用中的指纹格式(dsa 和 ecdsa),具体取决于服务器和客户端配置。在您的 known_hosts 文件中,您可以看到每个指纹的存储格式。

它是如何编码的?

known_hosts 文件是一个主机名列表(或者通常是主机名的散列)、指纹的类型以及 base64 编码的指纹本身(加密信息)。可以在OpenSSH 手册页SSH_KNOWN_HOSTS FILE FORMAT部分下找到格式详细信息。

这种所谓的“主机密钥”是不对称的。这是什么意思?

这些非对称机制意味着,虽然指纹允许您验证服务器的身份,但您不能使用它来生成有效的标识(以模拟)该服务器。

必须注意,指纹(和相应的私钥)用作密码操作的秘密:从客户端向服务器发送随机挑战。拥有私钥的服务器可以对该挑战进行签名并将其发送回,然后客户端可以验证签名是否有效,因为指纹是适当的。

换句话说,密码秘密是双重的,私钥可以加密或签名,公钥可以用于解密或验证签名。其中一个密钥可以毫无风险地公开,用于验证签名和加密文本,只有私钥的所有者才能解码。这大致就是密码学中非对称的含义。

于 2015-10-21T01:47:20.047 回答