Docker环境下Jenkins终端可SSH连接远程主机但配置后连接失败
Jenkins容器内SSH终端可连remote_host,但Jenkins UI配置SSH连接失败(Auth fail)
环境信息
- Docker Compose部署两个容器:
jenkins和remote_host - 持有密钥对:
id_rsa、id_rsa3(含公钥id_rsa3.pub) remote_host构建时,已将id_rsa3.pub复制到/home/a12/.ssh/authorized_keys
问题描述
- 进入Jenkins容器终端执行
ssh -i id_rsa3 a12@remote_host,可无密码成功连接remote_host - 在Jenkins UI中配置相同的
id_rsa3私钥进行SSH连接时,触发连接失败,日志显示Auth fail和Can't connect to server - 密钥生成命令:
ssh-keygen -t rsa -m PEM -f id_rsa3
已尝试操作
- 重新通过
ssh-keygen -t rsa -m PEM -f id_rsa3生成密钥对 - 重启Jenkins服务
- 在Jenkins容器终端验证SSH连接(成功)
- 重装Jenkins SSH组件
排查与解决方案
1. 核对Jenkins运行用户的密钥权限
Jenkins服务默认以jenkins用户运行,而终端测试可能用的是其他用户(如root),需确保密钥对属于jenkins用户且权限合规:
# 进入Jenkins容器 docker exec -it jenkins bash # 创建Jenkins用户的.ssh目录(如果不存在) mkdir -p /var/jenkins_home/.ssh # 将id_rsa3复制到该目录 cp /path/to/id_rsa3 /var/jenkins_home/.ssh/ # 设置权限 chown jenkins:jenkins /var/jenkins_home/.ssh/id_rsa3 chmod 600 /var/jenkins_home/.ssh/id_rsa3 chmod 700 /var/jenkins_home/.ssh
SSH会拒绝权限过宽的密钥文件,这是常见的认证失败原因。
2. 检查Jenkins配置中的私钥格式
确保在Jenkins SSH配置(或凭证管理)中粘贴的私钥完整无缺:包含开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----,无多余换行、空格或截断。
3. 验证连接目标与主机密钥检查
- 确认Jenkins配置的SSH服务器地址为
remote_host(Docker Compose服务名,容器间可直接解析),用户名是a12,端口匹配(默认22)。 - 若开启了Strict Host Key Checking,需确保
/var/jenkins_home/.ssh/known_hosts中已添加remote_host的主机密钥。可在Jenkins容器终端执行ssh-keyscan remote_host >> /var/jenkins_home/.ssh/known_hosts,并修改该文件权限为jenkins:jenkins。
4. 查看remote_host的SSH认证日志
进入remote_host容器,查看SSH日志获取更详细的失败原因:
docker exec -it remote_host bash # Debian/Ubuntu系统 cat /var/log/auth.log # RHEL/CentOS系统 cat /var/log/secure
日志会明确说明是密钥不匹配、用户权限不足还是连接被拒绝等问题。
5. 核对Jenkins SSH插件配置细节
- 若使用Jenkins凭证管理存储私钥,确认凭证类型为SSH Username with private key,私钥内容正确关联
id_rsa3。 - 检查插件版本是否兼容,可尝试升级SSH插件后重新测试。
内容的提问来源于stack exchange,提问作者Codeorion
相关产品推荐
相关产品推荐

