我的理解是openssh客户端只需要私钥,相应的公钥必须在服务器中。但是,当我将详细级别增加到 3 时,我在 ssh 客户端中看到以下内容。
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/test/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 60
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp SHA256:VvQDLGFJdfO9FUOqa1ODV6iLT4Te0Nm5Bz1OUA57LjY
debug3: sign_and_send_pubkey: RSA SHA256:VvQDLGFJdfO9FUOqa1ODV6iLT4Te0Nm5Bz1OUA57Lj
当它说“ Next authentication method: public key
”时,这是什么意思?为什么使用公钥?
答案1
首先,术语“公钥认证”是用于使用公钥/私钥对的非对称密钥加密技术进行认证的通用术语。
其次,公钥是作为 ssh 身份验证过程的一部分发送到服务器。客户端发送一个包含(除其他外)公钥的数据包;该数据包使用相应的私钥加密。该数据包标识用户,并且如果服务器可以验证签名,则可以对用户进行身份验证。
服务器检查服务器上是否存在公钥。文件的作用authorized_keys
,顾名思义,就是授权机制而不是验证机制。即密钥的存在authorized_keys
授权用户使用某个密钥,因此服务器不接受任何公钥。请注意,一个用户在文件中可以拥有多个密钥authorized_keys
。
答案2
可以从私钥导出公钥(在这种情况下导出可能意味着存储在一起)。私钥是私有的,不得共享。
因此,在连接的早期步骤中,当尝试找出使用什么键时。它可能会在服务器上挥动一些公钥。如果存在匹配,那么服务器将要求它证明它拥有私钥。