Jenkins SSH代理执行git fetch遇Bitbucket公钥权限拒绝问题排查
Jenkins流水线执行git fetch遇"git@bitbucket.org: Permission denied (publickey)"的排查原因
环境变量与shell加载差异:手动登录ubuntu用户时,shell会加载
~/.bashrc或~/.profile的配置,但Jenkins通过SSH代理执行命令时,属于非交互式非登录shell,不会自动加载这些配置,可能导致SSH_AUTH_SOCK等关键环境变量缺失,ssh-agent无法正常调用已添加的密钥。可以在流水线中添加命令对比:# Jenkins会话中检查 echo $SSH_AUTH_SOCK ssh-add -l # 手动登录时执行相同命令,对比输出SSH密钥及目录权限问题:手动操作时权限正常,但Jenkins执行时可能因上下文差异触发权限校验严格性问题。确保:
.ssh目录权限为700- 密钥文件(如
id_rsa)权限为600
可在流水线中添加命令检查:
ls -la ~/.ssh/Jenkins代理用户不匹配:确认Jenkins配置的SSH代理凭据对应的用户,和你手动登录的ubuntu用户完全一致。若Jenkins执行时切换了用户(比如通过sudo),会使用不同的家目录和密钥文件,导致权限验证失败。
ssh-agent未在Jenkins会话中初始化:手动登录时通常会自动启动ssh-agent并添加密钥,但Jenkins的SSH会话默认不会启动该服务。可在流水线脚本开头添加初始化步骤:
eval $(ssh-agent -s) ssh-add ~/.ssh/id_rsa # 若密钥有密码,需通过Jenkins凭据管理注入密码Bitbucket密钥关联混淆:确认添加到Bitbucket的公钥,与Jenkins代理用户家目录下的
~/.ssh/id_rsa.pub完全匹配。若存在多用户或多密钥文件,可能出现手动操作时用了其他密钥,但Jenkins默认调用id_rsa导致验证失败。
内容的提问来源于stack exchange,提问作者rohit agrawal
相关产品推荐
相关产品推荐

