ssh 在进行密钥协商时到底发送什么?

ssh 在进行密钥协商时到底发送什么?

当明确指定身份文件给 ssh 时:

ssh -i ./id_rsa ...

我在 ssh 调试跟踪中有以下几行:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

这是否意味着 ssh 生成的id_rsa也包含公共 RSA 指数?id_rsa格式似乎相当明确,它包含带有“BEGIN PRIVATE KEY”块的私钥,因此“提供公钥”必须意味着除了“将公钥发送到服务器”之外的其他含义。

编辑:

为了澄清起见,我想知道“提供公钥”这一行背后到底发生了什么。如果客户端持有多个密钥,它们将逐一提供给服务器。

答案1

为了连接到 SSH 服务器并使用您的公钥/私钥对进行身份验证,您必须首先与服务器共享您的公钥。

这是通过将私钥的公钥复制到服务器,然后~/ssh/authorized_keys通过复制/粘贴将其添加id_rsa.pub~/.ssh/authorized_keys服务器或将cat id_rsa.pub >> ~/.ssh/authorized_keys其附加到列表中来完成的。

当您连接时,服务器使用您的公钥签署质询,您的客户端使用您的私钥id_rsa解密该质询,使用服务器的公钥重新加密host key并将其发回。

主机通过使用其私钥解密您的响应来验证您是否正确解密了质询,并且客户端/主机根据共享数据(而不是您的公钥/私钥)建立加密连接。

在交换过程中,您的私钥或主机的私钥绝不会交换或泄露给对方。您的公钥存储在服务器上,但这就是它成为公钥的原因。

答案2

公钥/私钥加密基于一个非常简单的系统:

你有一个可以进行单向加密的公钥,以及一个可以加密。然后可以将公钥提供给世界上的每个人,这样就没有人能够解密您的加密数据,尽管他们能够加密您可以使用私钥解密的数据。

所以你的问题的答案是“你的公钥”。

答案3

我认为此时实际上不应该发送公钥或私钥。客户端应该使用私钥对服务器已知的明文进行加密。主机可以使用公钥解密此消息,知道唯一可以正确加密该消息的人是持有相应私钥的客户端,从而对客户端进行身份验证。

我相信它说的是Offering public key: ./id_rsa因为它使用私钥(存储在./id_rsa)对服务器已知的明文进行加密,然后服务器将使用公钥解密此密文并确认其与明文匹配。./id_rsa.pub在初始密钥生成后,客户端永远不需要公钥文件。这仅由服务器用于解密。

相关内容