当明确指定身份文件给 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
在初始密钥生成后,客户端永远不需要公钥文件。这仅由服务器用于解密。