Jenkins SSH Agent插件无公钥时如何与服务器建立连接?
SSH认证与Jenkins SSH Agent插件的密钥逻辑
先纠正一个常见误解:本地SSH连接远程服务器时,客户端不会主动发送公钥给服务器。实际流程是:
- 服务器生成一个随机字符串发送给客户端;
- 客户端用本地私钥(比如
~/.ssh/id_rsa)对这个字符串进行签名; - 客户端把签名结果发回服务器;
- 服务器用自己
authorized_keys文件中存储的公钥,尝试验证这个签名——如果某条公钥能验证通过,就证明客户端持有对应的私钥,认证通过。
Jenkins SSH Agent插件只需要私钥的原因很简单:它只需要完成客户端侧的「私钥签名」操作,不需要管公钥的事。服务器那边的
authorized_keys文件是提前配置好的——你需要把对应私钥的公钥,添加到服务器目标用户的~/.ssh/authorized_keys文件里(比如要以deploy用户登录服务器,就把公钥放到服务器上/home/deploy/.ssh/authorized_keys中)。你的假设方向是对的,但细节有偏差:不是服务器把用户名和公钥关联,而是服务器上每个用户的家目录下,都有自己的
~/.ssh/authorized_keys文件,这个文件里的所有公钥,都代表允许以该用户身份登录的客户端私钥。当Jenkins用指定用户名+私钥发起连接时,服务器会自动去该用户的authorized_keys里找能验证签名的公钥,匹配成功就完成认证。
内容的提问来源于stack exchange,提问作者zhongyuan chen
相关产品推荐
相关产品推荐

