Jenkins连接CentOS6.0 slave节点报错:无主机路由及连接未建立
排查并解决Jenkins Slave SSH连接异常(No route to host)
我来帮你一步步梳理这个问题——从日志里的No route to host可以确定,核心是Jenkins主节点和CentOS 6.0 slave虚拟机之间的网络连通性故障,后面的Java异常只是这个问题引发的次生问题,基本不是Jenkins本身的bug。咱们按优先级排查:
1. 先验证基础网络连通性(最关键)
先跳出Jenkins,直接从主节点服务器(注意是运行Jenkins的那台机器,不是你本地电脑)测试网络:
先ping slave主机,看能不能解析到IP并连通:
ping server2.abc.com如果ping不通,分两种情况处理:
- DNS解析失败:用
nslookup server2.abc.com检查域名是否能解析到正确的IP,如果不行,要么修改主节点的hosts文件(执行echo "slave的IP server2.abc.com" >> /etc/hosts),要么调整DNS配置 - 网络不通:检查VMware的网络模式——确保主节点和slave虚拟机在同一个网段(比如都用桥接模式,或者都用NAT模式),如果主节点是物理机,slave用NAT的话可能跨网段无法访问,改成桥接模式试试
- DNS解析失败:用
再测试SSH端口是否开放:
用telnet或者nc命令检查22端口是否可达:telnet server2.abc.com 22 # 或者 nc -zv server2.abc.com 22如果端口不通,检查slave的iptables防火墙:
# 在slave上执行,查看22端口是否放行 iptables -L -n | grep 22 # 如果没看到允许规则,添加并保存 iptables -A INPUT -p tcp --dport 22 -j ACCEPT service iptables save service iptables restart
2. 验证Jenkins的SSH配置正确性
如果基础网络能通,再检查Jenkins的slave配置:
- 确认slave的主机名/IP没有拼写错误,端口是否是22(如果slave改了SSH端口要对应)
- 检查凭证有效性:
- 如果用密码凭证,直接在主节点用
ssh username@server2.abc.com测试登录,看密码是否正确 - 如果用密钥凭证,要确保Jenkins运行用户(通常是
jenkins用户)能访问到私钥,且私钥对应的公钥已经添加到slave的~/.ssh/authorized_keys里:
如果这里需要输入密码,说明密钥配置有问题,重新生成/部署密钥即可# 在主节点切换到jenkins用户测试 su - jenkins ssh username@server2.abc.com
- 如果用密码凭证,直接在主节点用
3. 检查VMware虚拟机的网络状态
- 确认slave虚拟机的网络适配器是已连接状态(VMware界面里右键虚拟机→设置→网络适配器,勾选“已连接”)
- 在slave上用
ifconfig查看IP地址,确认IP是正常获取的(静态IP要检查子网掩码、网关是否正确,动态IP要确认DHCP正常分配)
4. 排查Jenkins插件兼容性(最后考虑)
如果以上都没问题,再看Jenkins的插件:
- 检查
SSH Credentials Plugin和SSH Slaves Plugin的版本,CentOS 6.0比较老旧,插件太新可能存在兼容问题,可以尝试降级到稳定版本 - 重启Jenkins服务,有时候插件加载异常会导致连接故障:
service jenkins restart
额外提示
如果还是无法解决,可以开启Jenkins的SSH调试日志(系统管理→系统设置→找到SSH连接相关的调试选项),查看更详细的连接过程,不过根据你当前的日志,核心还是网络连通性问题,优先解决网络层面的故障即可。
内容的提问来源于stack exchange,提问作者Rathan Bhiyapu
相关产品推荐
相关产品推荐

