You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 - jenkins
    
    输入jenkins看是否能切换成功。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:26:14