使用Deploy Key集成Jenkins与GitHub时出现访问被拒绝问题
我来帮你排查这个Jenkins和GitHub连接失败的问题——这种情况我踩过无数次,大概率是Jenkins运行用户的SSH密钥配置不对,或者权限、网络层面的小问题,咱们一步步来解决:
1. 先确认Jenkins运行用户的SSH密钥是不是正确的
你之前是在登录Jenkins服务器的用户下生成的密钥对吧?但Jenkins其实是用自己的运行用户(通常是jenkins)来执行Git命令的,这俩用户的密钥是分开的!
- 切换到Jenkins运行用户:
sudo su - jenkins(如果是自定义用户就换成对应的用户名) - 给这个用户生成专属的SSH密钥对:
ssh-keygen -t ed25519 -C "jenkins@your-server-domain.com",一路回车就行,别设密码,不然Jenkins运行时要手动输入密码,肯定失败 - 复制生成的公钥:
cat ~/.ssh/id_ed25519.pub,把这段内容粘贴到GitHub仓库的Deploy Keys里(记得勾选"Allow write access"如果你的任务需要推送代码),或者你的个人账号SSH Keys里
2. 手动测试Git连接,定位具体错误
在Jenkins用户下直接跑报错里的命令,能帮你快速找到问题:
- 先测试SSH连通性:
ssh -T git@github.com- 如果返回
Hi {your-github-username}! You've successfully authenticated, but GitHub does not provide shell access.,说明SSH连接完全没问题 - 如果报错
Permission denied (publickey),那就是密钥权限或者识别的问题:- 检查
.ssh目录权限:chmod 700 ~/.ssh(必须是700,不然SSH会拒绝读取) - 检查私钥权限:
chmod 600 ~/.ssh/id_ed25519(私钥必须是600,不能让其他用户读写) - 看看
.ssh目录下有没有config文件,如果有,确认里面没有干扰GitHub连接的配置
- 检查
- 如果返回
- 再跑报错里的ls-remote命令:
/opt/{user}/git/bin/git ls-remote -h git@github.com:{your-project}.git,看具体输出是什么,比如有没有路径错误、权限问题
3. 检查Jenkins的Git工具配置
- 进入Jenkins的「全局工具配置」,找到Git的配置项,确认Git的路径和你手动测试用的
/opt/{user}/git/bin/git完全一致,别配置错了路径 - 如果你的Jenkins是用Docker容器运行的,还要确认你生成的密钥对已经挂载到了容器内Jenkins用户的
~/.ssh目录下,不然容器里的Jenkins根本看不到密钥
4. 排查网络和防火墙问题
- 确认Jenkins服务器能访问GitHub的SSH端口(22):
telnet github.com 22,如果能连通说明网络没问题;如果连不上,检查服务器的防火墙规则,或者是不是公司网络限制了SSH访问 - 如果服务器用了代理,要确保Jenkins运行用户的环境变量里配置了正确的代理(SSH连接可能需要在
.ssh/config里单独配置代理,比如添加ProxyCommand)
内容的提问来源于stack exchange,提问作者fuzzi
相关产品推荐
相关产品推荐

