客户端的 ssh 私钥-公钥映射

客户端的 ssh 私钥-公钥映射

authorized_keys在服务器和客户端之间的 ssh 通信中,客户端通过其私钥进行身份验证。我想知道,如果服务器的文件中有多于 1 个公钥,服务器如何知道哪个公钥属于客户端。

答案1

客户端发送其公钥 ID,服务器检查该密钥是否在 的列表中authorized_keys

  • 客户端首先向服务器发送它想要进行身份验证的密钥对的 ID。

  • 服务器检查客户端尝试登录的帐户的authorized_keys 文件中的密钥ID。

  • 如果在文件中找到具有匹配 ID 的公钥,则服务器会生成一个随机数并使用该公钥对该数字进行加密。

  • 服务器向客户端发送此加密消息。如果客户端确实拥有关联的私钥,则它将能够使用该密钥解密消息,从而揭示原始号码。

https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process

答案2

这在RFC4252包括客户端和服务器来回发送的消息:

  • 第一条消息SSH_MSG_USERAUTH_REQUEST包含公钥 blob,用于与存储在中的密钥进行比较authorized_keys
  • 服务器应答SSH_MSG_USERAUTH_PK_OK或失败
  • 第二个SSH_MSG_USERAUTH_REQUEST再次包含公钥(假设它又是 blob)以及已知数据(包括公钥)的签名。

前两点不是强制性的,您只能执行最后一点(但探测使用哪个密钥可以节省计算能力)。

相关内容