Jenkins Slave节点离线:SSH密码认证失败问题求助
排查Jenkins Slave SSH密码认证失败问题
根据你提供的Dockerfile和错误日志,以下是逐步排查方案:
1. 手动验证容器内SSH服务与密码有效性
先脱离Jenkins,直接测试容器的SSH服务是否正常:
- 启动测试容器:
docker run -d --name test-slave [你的镜像名称] - 获取容器IP:
docker inspect test-slave | grep "IPAddress" - 从宿主机尝试SSH登录:
输入密码ssh jenkins@[容器IP]jenkins,如果登录失败,说明问题出在容器本身,而非Jenkins配置。
进入容器内部检查:
- 进入容器:
docker exec -it test-slave bash - 检查sshd进程是否运行:
ps aux | grep sshd - 验证jenkins用户密码:
输入su - jenkinsjenkins看是否能切换成功。
2. 检查SSH服务配置是否允许密码登录
容器内查看/etc/ssh/sshd_config,确保以下配置项正确:
PasswordAuthentication yes # 确保没有注释掉这一行 PermitEmptyPasswords no AllowUsers jenkins
如果PasswordAuthentication被设为no,修改后重启sshd:
/usr/sbin/sshd restart
或者直接在Dockerfile中添加修改配置的命令,重新构建镜像:
RUN sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
3. 修复Dockerfile中的密码设置逻辑
原Dockerfile中echo "jenkins:jenkins" | chpasswd可能在CentOS8容器中存在兼容性问题,替换为更可靠的命令:
RUN echo "jenkins" | passwd --stdin jenkins
同时确认主机密钥生成正常,检查容器内/etc/ssh/目录下是否有ssh_host_rsa_key等文件,若缺失,重新执行密钥生成命令:
RUN /usr/bin/ssh-keygen -A
4. 核对Jenkins凭证与代理配置
- 确认全局凭证的用户名是
jenkins,密码是jenkins,无拼写错误; - 检查Docker代理模板的SSH配置:
- 连接方式选择
SSH密码认证; - 用户名填写
jenkins; - 凭证选择对应的
jenkins/jenkins密码凭证; - 如果容器做了端口映射(如
-p 2222:22),务必将SSH端口改为映射后的端口(2222)。
- 连接方式选择
5. 解决SSH协议兼容性问题
CentOS8的sshd默认加密套件可能与Jenkins使用的Trilead SSH库不兼容,在容器的sshd_config中添加兼容配置:
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
在Dockerfile中添加修改命令:
RUN echo -e "\nKexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1" >> /etc/ssh/sshd_config && \ echo -e "Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com" >> /etc/ssh/sshd_config
重新构建镜像后测试连接。
6. 排查容器网络可达性
- 确认Jenkins主节点与Slave容器在同一网络(如Docker默认网桥或自定义网桥);
- 在Jenkins主节点上ping Slave容器IP,确保网络连通;
- 若使用Docker云插件,检查云配置中是否正确指定了容器网络。
内容的提问来源于stack exchange,提问作者komito
相关产品推荐
相关产品推荐

