# 主机/代理机连通性验证问题排查方法有哪些？
本文主要介绍主机连通性验证失败原因的排查方法，根据主机类型分为如下几种：
- [Linux主机问题排查]
- [自定义资源池问题排查]
- [Windows主机问题排查]
- [云主机问题排查]
 #### Linux机器问题排查
请按照以下步骤逐步排查：
1. 检查IP、用户名及密码是否正确。
2. 检查目标主机开放的端口是否为SSH协议端口（默认端口为22）。 
   如果不是，请按照以下步骤开启端口：
   1. 开启防火墙。
      ```
      systemctl start firewalld.service
      systemctl stop firewalld.service #关闭防火墙命令
      ```
      
   
   2. 开启端口。 --zone #作用域。
      --add-port=22/tcp #端口，格式为：端口/通讯协议。
      --permanent #永久生效，没有此参数重启后失效。
      ```
      firewall-cmd --zone=public --add-port=22/tcp --permanent
      ```
      
   
   3. 重启防火墙。
      ```
      firewall-cmd --reload
      ```
      
   
   
   
   
3. 检查当前网络状态。 
   - 使用"**tcpdump** "命令查看当前网络连接状态，命令如下：
     ```
     tcpdump -n "tcp port 22" | grep -v "xxx.xxx.xxx.xxx" 
     #该命令执行在本地PC端，其中xxx.xxx.xxx.xxx为被部署的目标主机IP，目的是验证部署主机的网络是否畅通。
     ```
     如下图所示，无回显信息说明网络已畅通。
     ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000002264327324.png "点击放大")
     
   
   - 或者执行以下命令，因为Linux系统机器需要在入方向规则中开放22端口，即添加目标主机/代理主机时添加的端口，远端设置为0.0.0.0/0（面向全IP开放以上端口）。
     ```
     tcpdump -n "tcp port 22 and host xxx.xxx.xxx.xxx" 
     #该命令执行在本地PC端，其中xxx.xxx.xxx.xxx为部署服务对外IP，目的是验证部署服务执行主机的网络是否畅通。
     ```
     部署服务对外IP请参见[部署服务对外IP](https://support.huaweicloud.com/productdesc-deployman/deployman_pdtd_00002.html#section4)。
     
     
     
   
   
   
   
4. 在菜单**"设置 \> 通用设置 \> 基础资源管理"** 页，单击集群名称进入详情。
   
   在主机列表中对目标主机做连通性验证，观察部署服务（CodeArts Deploy）是否对目标主机做了SSH协议连接，出现如下图所示，说明部署服务对目标主机做了SSH协议连接。
   ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001965443881.png "点击放大")
   反之，做出以下原因分析：
   - **服务端对目标主机存在SSH连接**
     如果服务端存在SSH连接，说明是目标主机本身配置问题。
     如果已经定位出是目标主机配置问题，或者未安装Tcpdump，都需要检查目标主机本身配置来排查：
     1. 参考《用户指南》["配置防火墙"](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_0018.html#section2)章节。
     
     2. 查看是否有防火墙配置，以iptables为例，命令如下：
        ```
        iptables -L
        ```
        
      
   
   - **服务端对目标主机不存在SSH连接**
     如果服务端对目标主机不存在SSH连接，说明目标主机网络不可达，其所在的网络环境可能存在访问限制。
     请查看硬件防火墙等相关网络配置，是否有限制源IP、目标IP、SSH协议配置的安全策略。
     
    
   
   
5. 查看ssh密钥文件权限。 
   root账户登录机器，依次执行以下命令查看ssh密钥文件权限。
   ```
   cd /root/.ssh
   ```
   ```
   ll
   ```
   如图所示，查看文件权限是否为"rw"。
   ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001938404856.png "点击放大")
   若文件权限不正确，执行以下命令完成修改。
   ```
   chmod 600 文件名
   ```
   
   
6. 主机连通性验证的用户对${HOME}目录操作失败。 
   1. 检查主机${HOME}目录所在磁盘是否已满。
      - 排查${HOME}目录所在磁盘是否已满，参考命令df -h 。
      
      - 查看用户${HOME}目录的权限设置及目录隐藏属性等信息：ll -ld ${HOME}，lsattr -d ${HOME}。
       
   
   2. 检查用户对${HOME}目录是否有读写权限。 修改${HOME}目录权限，为用户增加读写权限：参考命令 chmod ,chattr 。
      
   
   3. 检查用户默认shell设置是否为nologin模式。
      - 执行如下命令查看，参考命令：grep username /etc/passwd，其中将 "username" 替换为要检查的实际用户名。
      
      - 在该文件中，如果用户的 shell 列显示为 "/usr/sbin/nologin" 或 "/sbin/nologin"，则表示该用户被配置为nologin模式。
      
      - 如果用户为nologin模式，可以执行如下命令允许用户登录，参考命令：sudo usermod -s /bin/bash username，其中将 "username" 替换为要操作的实际用户名。
       
   
   
   
   
7. （代理主机）如果已关联主机的代理主机连通性失败或者界面提示"主机连接超时，请查看解决方案"，请按如下方式进行排查： 
   1. 测试代理主机的连通性。
   
   2. 检查代理主机上SSH配置AllowTcpForwarding是开启，命令如下：
      ```
      grep  "AllowTcpForwarding" /etc/ssh/sshd_config
      ```
      ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001989743413.png "点击放大")
      如果该属性值为no，则设置为yes，并重新启动sshd服务，命令如下：
      ```
      service sshd restart
      ```
      
   
   
   
   
 
 #### 自定义资源池问题排查
1. 检查主机所在的主机集群下代理资源池是否可用。 
   1. 单击主机集群名称，进入主机集群详情页，单击"管理资源池"。 
      ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000002295898536.png "点击放大")
      
      
   
   2. 进入资源池管理界面，查看对应资源池代理状态。
      - 若状态为下线，则删除已下线代理，重新[安装代理](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_1082.html)。
        ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001965443869.png "点击放大")
        
      
      - 若状态为停用，则在操作选项启用代理，重新执行连通性验证。 ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001938245556.png "点击放大")
        
       
   
   
   
   
2. 单击连通性验证结果，若界面提示为脚本执行错误，请按照如下方式进行排查。（若未提示脚本执行错误，请跳过。） 
   **原因分析：**
   因为自定义资源池需要使用docker拉取镜像，所以出现脚本执行错误的原因是自定义资源池中docker未安装或不能正常使用。您可按照如下方法进行排查。
   **排查方法：**
   1. 执行如下命令排查是否安装docker。
      ```
      docker --version
      ```
      ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001965524089.png "点击放大")
      若命令执行结果出现版本号，说明已安装docker。
      若命令执行结果未出现版本号，说明未安装docker。
      ![](https://support.huaweicloud.com/deployman_faq/public_sys-resources/note_3.0-zh-cn.png)
      如果未安装docker，您可根据[安装/卸载Docker](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_1099.html)，重新安装docker，再通过如下操作进行连通性验证。
      1. 进入服务首页，单击目标项目名称，进入目标项目下。
      
      2. 单击菜单**"设置 \> 通用设置 \> 基础资源管理"** ，默认进入**"主机集群"**页面。
      
      3. 单击目标集群名称，进入目标集群详情页，单击"代理主机"或"目标主机"页签。
      
      4. 单击主机所在行的![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001965443901.png "点击放大")，弹出修改主机信息框，可以修改主机信息重新进行连通性验证。
        
   
   2. 执行如下命令排查已安装的docker是否可正常使用。
      ```
      docker images
      ```
      ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001938245536.png "点击放大")
      若命令执行结果如上所示，说明docker能正常使用。反之，您需要先卸载docker，根据[安装/卸载Docker](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_1099.html)，重新安装docker。
      
   
   
   
   
 #### Windows机器问题排查
请按照以下步骤逐步排查：
1. 检查IP、用户名及密码是否正确。
2. 参考《用户指南》["代理主机配置"](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_1102.html#section1)章节指导进行代理主机配置。
3. 参考《用户指南》["目标主机配置"](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_1101.html#section1)章节指导开启WinRM功能。
   
   
   
   
   
   
   
   
4. 参考《用户指南》["Windows系统主机配置"](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_1101.html#section3)章节查看WinRM功能是否开启，在powershell命令行执行如下命令：
   
   ```
   winrm e winrm/config/listener
   ```
   - 若出现HTTPS且Hostname不为空，则表示监听成功，即Windows2012部署环境自动化配置成功，如下图所示。 ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001965524081.png "点击放大")
     
   
   - 如果监听命令的返回结果中，Hostname为空，则是因为您的主机无IIS服务和签名证书等信息，需要执行以下脚本。
     ```
     #配置WinRM远端管理
     winrm enumerate winrm/config/listener
     winrm quickconfig
     winrm set winrm/config/service/auth '@{Basic="true"}'
     winrm set winrm/config/service/auth '@{CredSSP="true"}'
     winrm set winrm/config/service '@{AllowUnencrypted="true"}'
     #安装IIS服务
     Import-Module servermanager
     Add-windowsfeature Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-App-Dev,Web-ASP,Web-ISAPI-Ext,Web-Health,Web-Http-Logging,Web-Log-Libraries,Web-Request-Monitor,Web-Security,Web-Filtering,Web-Stat-Compression,Web-Mgmt-Tools
     #新建自签名证书
     New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My\ -DnsName 'windows-deploy-connect'
     #查看自签名证书
     ls Cert:\LocalMachine\My
     #通过新增的自签名证书添加安全连接
     $windows_test_key=(Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match "windows-deploy-connect"}).Thumbprint
     cmd /c "winrm set winrm/config/Listener?Address=*+Transport=HTTPS @{Enabled=`"true`";Port=`"5986`";Hostname=`"windows-deploy-connect`";CertificateThumbprint=`"$windows_test_key`"}"
     ```
     
   
   
   
   
5. 参考《用户指南》["配置防火墙 \> Windows防火墙配置方式"](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_0018.html)章节，查看Windows防火墙是否允许外部主机访问WinRM服务，如下图所示。
   
   ![](https://support.huaweicloud.com/deployman_faq/zh-cn_image_0000001938404868.png "点击放大")
   
   
 
 #### 云主机问题排查
首先按照普通主机步骤排查问题。对于云主机，需要在安全组中配置部署对外IP并开通访问权限。（参考《用户指南》["创建主机集群的前提条件"](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_0018.html)章节）
