Jenkins同一SSH凭证拉取正常,推送至BitBucket时权限被拒
Jenkins SSH凭证拉取正常但推送失败的原因与排查
这是真实的权限错误,并非误导性提示。核心原因是BitBucket对仓库的**读权限(拉取)和写权限(推送)**是独立控制的,同一个SSH密钥可能仅被授予了读权限,没有写权限。
具体排查点:
BitBucket端配置
- 登录BitBucket目标仓库,找到你配置的SSH公钥(对应Jenkins凭证XXX的公钥),检查关联的用户/团队角色:必须是开发者及以上权限(访客角色只有只读权限)
- 查看master分支的保护规则:确认是否允许该用户直接推送,有没有开启"必须通过PR合并"、"禁止直接推送master"之类的限制
Jenkins任务配置
- 确认推送的远程仓库地址和拉取的完全一致,避免推送时指向了其他无权限的仓库
- 检查推送步骤的Git命令:确保明确指定了使用凭证XXX,部分Jenkins任务可能在推送阶段默认使用系统Git配置,而非任务中配置的凭证
- 在Jenkins服务器上手动测试:用Jenkins运行用户执行
ssh -i [私钥路径] -T git@bitbucket.org,查看返回信息(如果显示"You can read/write..."则权限正常,仅显示仓库名称则只有读权限)
密钥与系统权限
- 确认私钥未设置密码,或Jenkins凭证中已正确填写私钥密码
- 检查Jenkins服务器上私钥文件的权限:必须设为
600,防止因权限过宽被Git拒绝使用
快速验证方法
用本地机器加载同一个SSH密钥,尝试手动推送代码到master分支:
- 如果本地也失败:问题肯定在BitBucket的权限或分支保护配置
- 如果本地能推送:问题出在Jenkins的凭证引用或运行用户权限配置
内容的提问来源于stack exchange,提问作者Pratik V Shah
相关产品推荐
相关产品推荐

