主机/代理机连通性验证问题排查方法有哪些?
本文主要介绍主机连通性验证失败原因的排查方法,根据主机类型分为如下几种:
Linux机器问题排查
- 检查IP、用户名及密码是否正确。
- 检查目标主机开放的端口是否为SSH协议端口(默认端口为22)。
开启方法:
- 开启防火墙。
systemctl start firewalld.service systemctl stop firewalld.service #关闭防火墙命令
- 开启端口。
firewall-cmd --zone=public --add-port=22/tcp --permanent
--zone #作用域。
--add-port=22/tcp #端口,格式为:端口/通讯协议。
--permanent #永久生效,没有此参数重启后失效。
- 重启防火墙。
firewall-cmd --reload
- 开启防火墙。
- 检查当前网络状态。
使用“tcpdump”命令查看当前网络连接状态,命令如下:
tcpdump -n "tcp port 22 and host xxx.xxx.xxx.xxx" #该命令执行在本地PC端,其中xxx.xxx.xxx.xxx为部署服务对外IP,目的是验证部署服务执行主机的网络是否畅通。
#或者:
tcpdump -n "tcp port 22" | grep -v "xxx.xxx.xxx.xxx" #该命令执行在本地PC端,其中xxx.xxx.xxx.xxx为被部署的目标主机IP,目的是验证部署主机的网络是否畅通。
如下图所示,无回显信息说明网络已畅通。
部署服务对外IP如下。
新加坡站: 114.119.185.21 圣保罗站: 159.138.214.24 墨西哥站: 122.8.183.54 110.238.80.148 圣地亚哥站: 119.8.154.190 土耳其站: 101.44.36.238 利雅得站: 101.46.48.174
- 在菜单“设置 > 通用设置 > 基础资源管理”页,单击集群名称进入详情,在主机列表中对目标主机做连通性验证,观察部署服务(CodeArts Deploy)是否对目标主机做了SSH协议连接,出现如下图所示,说明部署服务对目标主机做了SSH协议连接。原因分析:
- 服务端对目标主机存在SSH连接
如果服务端存在SSH连接,说明是目标主机本身配置问题。
如果已经定位出是目标主机配置问题,或者未安装Tcpdump,都需要检查目标主机本身配置来排查:
- 参考《用户指南》“配置黑/白名单”章节。
- 查看是否有防火墙配置,以iptables为例,命令如下:
iptables -L
- 服务端对目标主机不存在SSH连接
如果服务端对目标主机不存在SSH连接,说明目标主机网络不可达,其所在的网络环境可能存在访问限制。
请查看硬件防火墙等相关网络配置,是否有限制源IP、目标IP、SSH协议配置的安全策略。
- 服务端对目标主机存在SSH连接
- 查看ssh密钥文件权限。
root账户登录机器,依次执行以下命令查看ssh密钥文件权限。
cd /root/.ssh
ll
如图所示,查看文件权限是否为“rw”。
若文件权限不正确,执行以下命令完成修改。
chmod 600 文件名
- 主机连通性验证的用户对${HOME}目录操作失败。
- 检查主机${HOME}目录所在磁盘是否已满。
- 排查${HOME}目录所在磁盘是否已满,参考命令df -h 。
- 查看用户${HOME}目录的权限设置及目录隐藏属性等信息:ll -ld ${HOME},lsattr -d ${HOME}。
- 检查用户对${HOME}目录是否有读写权限。
- 检查用户默认shell设置是否为nologin模式。
- 执行如下命令查看,参考命令:grep username /etc/passwd,其中将 "username" 替换为要检查的实际用户名。
- 在该文件中,如果用户的 shell 列显示为 "/usr/sbin/nologin" 或 "/sbin/nologin",则表示该用户被配置为nologin模式。
- 如果用户为nologin模式,可以执行如下命令允许用户登录,参考命令:sudo usermod -s /bin/bash username,其中将 "username" 替换为要操作的实际用户名。
- 检查主机${HOME}目录所在磁盘是否已满。
- (代理主机)如果已关联主机的代理主机连通性失败或者界面提示“主机连接超时,请查看解决方案”,请按如下方式进行排查:
- 测试代理主机的连通性。
- 检查代理主机上SSH配置AllowTcpForwarding是开启,命令如下:
grep "AllowTcpForwarding" /etc/ssh/sshd_config
如果该属性值为no,则设置为yes,并重新启动sshd服务,命令如下:
service sshd restart
自托管资源池问题排查
- 检查主机所在的主机集群下代理资源池是否可用。
- 单击主机集群名称,进入主机集群详情页,单击“管理资源池”。
- 进入资源池管理界面,查看对应资源池代理状态。
- 若状态为下线,则删除已下线代理,重新安装代理。
- 若状态为停用,则在操作选项启用代理,重新执行连通性验证。
- 若状态为下线,则删除已下线代理,重新安装代理。
- 单击主机集群名称,进入主机集群详情页,单击“管理资源池”。
- 单击连通性验证结果,若界面提示为脚本执行错误,请按照如下方式进行排查。(若未提示脚本执行错误,请跳过。)
原因分析:
因为自托管资源池需要使用docker拉取镜像,所以出现脚本执行错误的原因是自托管资源池中docker未安装或不能正常使用。您可按照如下方法进行排查。
排查方法:
- 执行如下命令排查是否安装docker。
docker --version
若命令执行结果出现版本号,说明已安装docker。
若命令执行结果未出现版本号,说明未安装docker。
如果未安装docker,您可根据安装/卸载Docker,重新安装docker,再通过如下操作进行连通性验证。- 进入部署服务,单击目标应用名称,进入目标项目下,单击菜单“设置 > 通用设置 > 基础资源管理”,默认进入“主机集群”页面。
- 单击目标集群名称,进入目标集群详情页,单击“代理主机”或“目标主机”页签。
- 单击主机所在行的
,弹出修改主机信息框,可以修改主机信息重新进行连通性验证。
- 执行如下命令排查已安装的docker是否可正常使用。
docker images
若命令执行结果如上所示,说明docker能正常使用。反之,您需要先卸载docker,根据安装/卸载Docker,重新安装docker。
- 执行如下命令排查是否安装docker。