Docker中Jenkins访问BitBucket仓库的权限问题求助
Docker中Jenkins访问BitBucket仓库失败问题
场景
- Jenkins部署在需特定VPN访问的远程AWS机器的Docker容器中
- 使用SSH密钥认证的普通BitBucket账号访问仓库
操作步骤
- 通过Linux
ssh keygen命令生成密钥对,将公钥添加至BitBucket仓库的安全设置中 - 登录Jenkins创建Freestyle任务,进入源码管理配置选择Git,填写仓库地址
git@bitbucket.org:my_company/my_repo.git - 添加Jenkins凭据:类型选择「SSH Username with private key」,填写账号用户名并直接输入私钥内容
- 选择该凭据后触发仓库连接错误
报错信息
连接仓库失败:命令 "git ls-remote -h -- git@bitbucket.org:cryptoblock/cblock1.git HEAD" 返回状态码128: 标准输出: 标准错误:bitbucket.org的RSA主机密钥未知,且你要求严格检查。 主机密钥验证失败。 致命错误:无法从远程仓库读取内容。 请确保你拥有正确的访问权限,且仓库存在。
已尝试的方法
- 多次重新生成SSH密钥对
- 在Docker宿主机、容器内/root/.ssh、Jenkins用户~/.ssh目录放置私钥
- 尝试执行
ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts,但提示bash: /var/jenkins_home/.ssh/known_hosts: Permission denied,修改sudoers后用sudo执行仍无效 - 仅支持SSH访问,无法改用HTTPS方式
可正常操作的情况
- Docker宿主机使用相同SSH密钥可正常
git clone该仓库 - 本地机器也可正常访问该仓库
解决方案
方法1:容器内以Jenkins用户配置known_hosts
- 进入Jenkins容器:
docker exec -it <你的Jenkins容器名> bash - 切换至jenkins用户:
su jenkins(必须切换,Jenkins服务默认用该用户运行) - 若不存在.ssh目录则创建并设置权限:
mkdir -p ~/.ssh && chmod 700 ~/.ssh - 添加bitbucket.org的主机密钥到known_hosts:
ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts - 设置known_hosts文件权限:
chmod 600 ~/.ssh/known_hosts
方法2:通过Jenkins全局配置添加主机密钥
- 登录Jenkins后台,进入「Manage Jenkins」→「Configure System」
- 找到「Git plugin」板块下的「Git Host Key Verification Configuration」
- 选择「Manually provided keys」,点击「Add Host Key」
- 主机名填写
bitbucket.org,密钥内容可从宿主机~/.ssh/known_hosts复制,或执行ssh-keyscan -H bitbucket.org获取 - 保存配置后重新测试仓库连接
方法3:挂载宿主机known_hosts到容器
利用宿主机已有的可用known_hosts,挂载到Jenkins容器的对应目录:
- 修改Docker启动命令或docker-compose.yml,添加挂载项:
-v /宿主机用户目录/.ssh/known_hosts:/var/jenkins_home/.ssh/known_hosts - 进入容器执行命令确保权限正确:
chown jenkins:jenkins /var/jenkins_home/.ssh/known_hosts
核心注意事项
- 所有与SSH相关的文件(.ssh目录、私钥、known_hosts)必须归jenkins用户所有,权限严格设置为目录700、文件600,否则Jenkins服务无法读取
- 禁止用root用户操作后直接给jenkins用户,必须确保操作全程以jenkins用户执行或正确修改权限
内容的提问来源于stack exchange,提问作者Henrique Vilela
相关产品推荐
相关产品推荐

