SFTP 有一个选项“-i”,用于设置用于公钥认证的私钥。但是,似乎没有用于使用哪个匹配公钥的选项。当然,它必须需要这个来告诉服务器要使用哪个公钥进行质询。
为什么会这样以及它是如何工作的?
答案1
首先,“私钥”文件包含密钥的所有部分。包括公钥和私钥部分。如果删除公钥的本地副本,您只需从包含私钥的文件重新创建它即可。您可以使用 查看 RSA 密钥的所有内容。openssl rsa -in filename.id_rsa -text
因此,当您拥有私钥时,您实际上永远不需要识别密钥对的“公钥”部分。私钥包含所有信息。
至于服务器对客户端进行身份验证。服务器不会根据公钥加密某些内容。相反,客户端会发送一些信息,其中包含签名由私钥签名。服务器可以使用其已知的公钥来验证这一点。
https://www.rfc-editor.org/rfc/rfc4252
To perform actual authentication, the client MAY then send a
signature generated using the private key. The client MAY send the
signature directly without first verifying whether the key is
acceptable. The signature is sent using the following packet:
byte SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "publickey"
boolean TRUE
string public key algorithm name
string public key to be used for authentication
string signature
The value of 'signature' is a signature by the corresponding private
key over the following data, in the following order:
string session identifier
byte SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "publickey"
boolean TRUE
string public key algorithm name
string public key to be used for authentication
答案2
要使用的公钥是在所连接服务器上的用户帐户的 authorized_keys 文件中设置的。它不在客户端中设置。
是一篇很好的文章,可以了解其工作原理。