当我们向主持人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文件中。它是如何编码的?我们怎样才能确保这不是一个中间人? 最后,这个所谓的“主机密钥”是不对称的。这是什么意思?
答案 0 :(得分:2)
我们怎样才能确保这不是一个中间人?
第一次,您可以检查RSA指纹。有人需要事先与您沟通,或者您需要以某种方式安全地接收它(即通过https网站发布,或通过签名的电子邮件接收)。例如,许多托管服务提供商会向您发送主机SSH指纹。
在Ubuntu上,您可以使用以下方法找到自己的RSA指纹:
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
请注意,还有其他正在使用的指纹格式(dsa和ecdsa),具体取决于服务器和客户端配置。在您的known_hosts文件中,您可以看到每个指纹的存储格式。
它是如何编码的?
known_hosts文件是base64编码中的主机名列表(通常是主机名的哈希值),指纹类型和指纹本身(加密信息)。格式详细信息可以在{em> SSH_KNOWN_HOSTS FILE FORMAT 部分的OpenSSH man page中找到。
这种所谓的“主机密钥”是不对称的。这是什么意思?
这些非对称机制意味着虽然指纹允许您验证服务器的身份,但您无法使用它来生成有效的标识(模仿)该服务器。
必须注意,指纹(和相应的私钥)用作加密操作的 secret :从客户端向服务器发送随机 challenge 。具有私钥的服务器可以签署该问题并将其发回,然后客户端可以验证签名是否有效,因为指纹是合适的。
换句话说,加密秘密是双重的,私钥可以加密或签名,公钥可用于解密或验证签名。其中一个密钥可以在没有风险的情况下公开,并用于验证签名和加密文本,只有私钥的所有者才能解码。这大致是密码学中的非对称方式。