执行密钥协商时 ssh 到底发送了什么?

Ale*_*x B 10 ssh

向 ssh 显式指定身份文件时:

ssh -i ./id_rsa ...
Run Code Online (Sandbox Code Playgroud)

我在 ssh 调试跟踪中有这些行:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

cpb*_*lls 12

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

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

当您连接时,服务器使用您的公钥对挑战进行签名,您的客户端使用您的私钥id_rsa解密挑战,使用服务器的公钥重新加密host key并将其发回。

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

在交换中没有一点是您的私钥,或主机的私钥相互交换或透露。您的公钥存储在服务器上,但这就是它是公钥的原因。