当我们ssh到一个主机时,它要么是已知的,要么是未知的。在后一种情况下,在我们第一次尝试连接时,我们被提示
主机13x.8x.xx的真实性。1x1 (13x.8x.xx.1x1)'无法建立。RSA密钥指纹为xx:xx:xx:xx:26:86:80:5f:17:xx:xx:xx:xx:6d:6c。您确定要继续连接(是/否)吗?是的
服务器的RSA公钥存储在.ssh/know_hosts文件中。它是如何编码的?我们如何确保这不是一个中间人?最后,这个所谓的"主机密钥"是不对称的。这是什么意思?
我们如何确保这不是一个中间人?
第一次可以检查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 一节中找到。
这个所谓的"主机密钥"是不对称的。这是什么意思?
这些非对称机制意味着,虽然指纹允许您验证服务器的身份,但您不能使用它来生成有效的标识(以冒充)该服务器。
必须注意的是,指纹(和相应的私钥)被用作加密操作的秘密:一个随机的挑战从客户端发送到服务器。拥有私钥的服务器可以签名并将其发回,然后客户端可以验证签名是否有效,因为指纹是合适的。换句话说,密码学秘密是双重的,私钥可以加密或签名,公钥可以用来解密或验证签名。其中一个密钥可以毫无风险地公开,并用于验证签名和加密文本,只有私钥的所有者才能解码。这就是密码学中不对称的大致含义。