文档中心 > 云服务器 ECS

SSH 无法远程登录问题的处理思路

更新时间: 访问次数:6632

您在购买云服务器 ECS(后续简称 ECS)Linux 服务器后,首先面临的就是如何登录和使用的问题。而由于服务器在云端,所以日常运维中通常都会基于 SSH 客户端登录服务器进行相关操作。本文会从登录 ECS 的不同方法和使用场景讲起,捋清 SSH 无法远程登录问题的常见原因与排查思路。

ECS Linux 服务器的登录方式

ECS Linux 不同登录方式示意图

如上图所示,当前 ECS Linux 支持 3 种不同的登录方式,其操作说明与使用场景如下:

  • 管理终端(远程连接)

    • 使用场景:当出现 ECS 启动异常、网络中断或 SSH 无法正常连接等情况时,可以通过管理终端(远程连接)功能直接连接服务器。它基于 VNC 技术,相当于在 ECS 上直连了一台虚拟的显示器(含鼠标、键盘)。
    • 操作说明:管理终端的使用方法,可以参阅 产品文档
  • SSH

    • 使用场景:标准的 Linux 服务器连接方式。您可以通过各种 Linux SSH 客户端连接、登录 ECS,进行服务器的运维和管理工作。
    • 操作说明:使用常用 SSH 客户端连接、登录 ECS Linux 服务器的操作方法,可以参阅 产品文档
  • SSH 密钥对

    • 使用场景:基于密钥对的免密码登录,降低了密码泄露的风险,提高了操作的安全性,同时也便于服务器的批量运维。
    • 操作说明:SSH 密钥对的使用方法,可以参阅 产品文档

SSH 无法远程登录问题的常见原因与处理思路

如前所述,SSH 客户端是 ECS Linux 服务器的主要的运维途径。而网络、服务器配置、SSH 服务配置等多种因素均可能会导致 SSH 连接或登录过程出现异常。接下来会先介绍影响 SSH 连接或登录的常见因素,然后说明此类问题的分析处理思路。

SSH 连接登录相关因素

SSH 连接登录相关因素示意图

如上图所示,多种因素均可能会导致客户端通过 SSH 连接或登录服务器出现异常,包括但不限于:

  • 客户端软件或软件配置问题
  • 客户端网络问题
  • 中间链路问题
  • 云盾、ECS 安全组或系统内 iptables 等安全配置问题
  • Linux 系统 PAM 安全模块配置问题
  • Linux 系统环境配置问题
  • SSH 服务及参数配置问题
  • SSH 服务关联的目录或文件的属性配置问题
  • SSH 服务密钥配置问题

SSH 无法远程登录问题处理思路

SSH 无法远程登录问题处理思路示意图

如果 SSH 无法正常连接或登录,可以参阅上图,通过如下步骤逐一进行排查分析:

1. 检查客户端软件配置与网络配置

通过如下方法做对比分析,以判断是否是客户端软件、软件配置或客户端网络存在异常,导致无法正常 SSH 连接或登录服务器:

  • 重启家用路由器,或通过 4G 热点共享的方式,切换到不同的网络做对比测试。
  • 基于相同账户,使用不同的 SSH 客户端软件做对比访问测试。

2. 检查中间网络

通过如下方法对中间网络做判断和对比分析,以判断是否是中间网络引发的异常:

a. ping 服务器 IP ,看是否正常。比如:ping 223.5.5.5

1
2
3
4
5
6
7
8
9
10
11
12
13
<ol class="linenums">
  
 <li class="L0"><span class="pun">-</span><span class="pln"> </span><span class="pun">如果正常,则说明客户端到服务端的中间链路是正常的。</span></li>
  
 <li class="L1"><span class="pun">-</span><span class="pln"> </span><span class="pun">如果不正常,则可以参阅如下文档针对客户端到服务器之间的网络做进一步排查分析:</span></li>
  
 <li class="L2"><span class="pln">    </span><span class="pun">-</span><span class="pln"> </span><span class="pun">[</span><span class="pln">ping </span><span class="pun">丢包或不通时链路测试说明](~~</span><span class="lit">40573</span><span class="pun">~~)</span></li>
  
 <li class="L3"><span class="pln">    </span><span class="pun">-</span><span class="pln"> </span><span class="pun">[能</span><span class="pln"> ping </span><span class="pun">通但端口不通时端口可用性探测说明](~~</span><span class="lit">40572</span><span class="pun">~~)</span></li>
  
 <li class="L4"><span class="pln">    </span><span class="pun">-</span><span class="pln"> </span><span class="pun">[网络异常时抓包操作说明](~~</span><span class="lit">40564</span><span class="pun">~~)</span></li>
 
</ol>

b. telnet <服务器 IP> ,看是否正常。比如: telnet 223.5.5.5 22

1
2
3
4
5
<ol class="linenums">
  
 <li class="L0"><span class="pun">-</span><span class="pln"> </span><span class="pun">正常情况下,如下图所示,会返回服务端</span><span class="pln"> SSH </span><span class="pun">软件版本号信息:</span></li>
 
</ol>

telnet SSH 端口测试正常示意图

1
2
3
4
5
<ol class="linenums">
  
 <li class="L0"><span class="pun">-</span><span class="pln"> </span><span class="pun">如果不正常,则说明可能是</span><span class="pln"> SSH </span><span class="pun">服务异常或被云盾、安全组等拦截所致,则参阅后续步骤继续排查分析。</span></li>
 
</ol>

3. 安全配置检查

通过如下方法,对 SSH 连接相关安全因素进行排查分析:

a. 通过 淘宝 IP 地址库 等网站获取本地网络出口公网 IP 后,到云盾控制台查询相关访问是否被云盾拦截。b. 检查服务器归属安全组规则,确认对客户端做了访问放行。c. 检查服务器内部 iptables 等安全配置,确认对客户端做了访问放行。

4. SSH 服务与监听状态检查

通过如下方法,检查 SSH 服务自身运行状态:

a. 可以通过 管理终端 进入服务器。

b. 通过如下指令检查 SSH 服务运行状态。如果服务运行正常,则会返回运行状态及相应进程 PID:

1
2
3
4
5
6
7
8
9
10
11
12
13
<ol class="linenums">
  
 <li class="L0"><span class="pun">[</span><span class="pln">root@centos </span><span class="pun">~]#</span><span class="pln"> service sshd status</span></li>
  
 <li class="L1"><span class="pln">openssh</span><span class="pun">-</span><span class="pln">daemon </span><span class="pun">(</span><span class="pln">pid  </span><span class="lit">31350</span><span class="pun">)</span><span class="pln"> is running</span><span class="pun">…</span></li>
  
 <li class="L2"><span class="pun">[</span><span class="pln">root@centos </span><span class="pun">~]#</span><span class="pln"> service sshd restart</span></li>
  
 <li class="L3"><span class="typ">Stopping</span><span class="pln"> sshd</span><span class="pun">:</span><span class="pln">                                             </span><span class="pun">[</span><span class="pln">  OK  </span><span class="pun">]</span></li>
  
 <li class="L4"><span class="typ">Starting</span><span class="pln"> sshd</span><span class="pun">:</span><span class="pln">                                             </span><span class="pun">[</span><span class="pln">  OK  </span><span class="pun">]</span></li>
 
</ol>

c. 通过如下指令检查 SSH 服务的端口监听状态。正常情况下会返回相应端口的监听信息:

1
2
3
4
5
6
7
<ol class="linenums">
  
 <li class="L0"><span class="pln">netstat </span><span class="pun">-</span><span class="pln">ano </span><span class="pun">|</span><span class="pln"> grep </span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">:</span><span class="lit">22</span></li>
  
 <li class="L1"><span class="pln">tcp        </span><span class="lit">0</span><span class="pln">      </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">:</span><span class="lit">22</span><span class="pln">                  </span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pun">:*</span><span class="pln">                   LISTEN      off </span><span class="pun">(</span><span class="lit">0.00</span><span class="pun">/</span><span class="lit">0</span><span class="pun">/</span><span class="lit">0</span><span class="pun">)</span></li>
 
</ol>
  • 0.0.0.0 表示监听所有网卡
  • 如果配置仅监听内网网卡,比如 10.126.3.45:22,则只能通过内网进行 SSH 登录

d. 在系统内通过类似 ssh 127.0.0.1 的方式做对比测试,以判断 SSH 服务连接是否正常:

用法: ssh -p \ 127.0.0.1比如:

1
2
3
4
5
6
7
<ol class="linenums">
  
 <li class="L0"><span class="pln">ssh </span><span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span></li>
  
 <li class="L1"><span class="pln">ssh </span><span class="pun">-</span><span class="pln">p </span><span class="lit">2022</span><span class="pln"> </span><span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span></li>
 
</ol>

如果上述登录测试正常,则说明 SSH 服务本身运行与监听是正常的。则通过后续步骤做进一步排查分析。

5. SSH 登录错误进一步分析

如果确认 SSH 服务及外部网络链路正常,则可以通过如下方法,进一步检查 SSH 登录相关的具体错误信息,然后结合历史案例做相应分析和处理:

a. 实时查看 SSH 服务端安全日志:

通过管理终端进入服务器。通过类似如下指令实时查看 SSH 服务端安全日志:

1
2
3
4
5
6
7
<ol class="linenums">
  
 <li class="L0"><span class="typ">CentOS</span><span class="pln"> </span><span class="pun">服务器:</span><span class="pln">tailf </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">log</span><span class="pun">/</span><span class="pln">secure</span></li>
  
 <li class="L1"><span class="typ">Ubuntu</span><span class="pln"> </span><span class="pun">服务器:</span><span class="pln">tailf </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">log</span><span class="pun">/</span><span class="pln">auth</span></li>
 
</ol>

b. 开启客户端 SSH debug 模式,获取详细登录日志:

如果客户端是 Linux 环境,则可以通过如下指令,获取详细的 SSH 登录交互日志:

1
2
3
4
5
<ol class="linenums">
  
 <li class="L0"><span class="pln">ssh </span><span class="pun">-</span><span class="pln">vvv </span><span class="pun"><服务器</span><span class="pln"> IP</span><span class="pun">></span></li>
 
</ol>

比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<ol class="linenums">
  
 <li class="L0"><span class="pun">[</span><span class="pln">root@centos</span><span class="pun">~]#</span><span class="pln"> ssh </span><span class="pun">-</span><span class="pln">vvv </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.1</span></li>
  
 <li class="L1"><span class="typ">OpenSSH_5</span><span class="pun">.</span><span class="lit">3p1</span><span class="pun">,</span><span class="pln"> </span><span class="typ">OpenSSL</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">.</span><span class="lit">1e</span><span class="pun">-</span><span class="pln">fips </span><span class="lit">11</span><span class="pln"> </span><span class="typ">Feb</span><span class="pln"> </span><span class="lit">2013</span></li>
  
 <li class="L2"><span class="pln">debug1</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Reading</span><span class="pln"> configuration data </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">ssh</span><span class="pun">/</span><span class="pln">ssh_config</span></li>
  
 <li class="L3"><span class="pln">debug1</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Applying</span><span class="pln"> options </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">*</span></li>
  
 <li class="L4"><span class="pln">debug2</span><span class="pun">:</span><span class="pln"> ssh_connect</span><span class="pun">:</span><span class="pln"> needpriv </span><span class="lit">0</span></li>
  
 <li class="L5"><span class="pln">debug1</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Connecting</span><span class="pln"> to </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.1</span><span class="pln"> </span><span class="pun">[</span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.1</span><span class="pun">]</span><span class="pln"> port </span><span class="lit">22.</span></li>
  
 <li class="L6"><span class="pln">debug1</span><span class="pun">:</span><span class="pln"> connect to address </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.1</span><span class="pln"> port </span><span class="lit">22</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Connection</span><span class="pln"> timed out</span></li>
  
 <li class="L7"><span class="pln">ssh</span><span class="pun">:</span><span class="pln"> connect to host </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.1</span><span class="pln"> port </span><span class="lit">22</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Connection</span><span class="pln"> timed out</span></li>
  
 <li class="L8"><span class="pun">...</span></li>
 
</ol>

c. 参阅云服务器 ECS > 常见问题 > 操作运维 Linux > 远程登录 (SSH)目录下的历史案例,结合前述步骤获取的 SSH 客户端及服务端的日志进行对比分析和处理。

工单提交须知

如果您参阅前述步骤排查分析后,问题还未能解决。烦请记录前述各步骤的测试结果,及相关日志信息或截图,然后 提交工单 联系售后技术支持。

FAQ

关于此文档暂时还没有FAQ
返回
顶部