您在购买云服务器 ECS(后续简称 ECS)Linux 服务器后,首先面临的就是如何登录和使用的问题。而由于服务器在云端,所以日常运维中通常都会基于 SSH 客户端登录服务器进行相关操作。本文会从登录 ECS 的不同方法和使用场景讲起,捋清 SSH 无法远程登录问题的常见原因与排查思路。
如上图所示,当前 ECS Linux 支持 3 种不同的登录方式,其操作说明与使用场景如下:
管理终端(远程连接)
SSH
SSH 密钥对
如前所述,SSH 客户端是 ECS Linux 服务器的主要的运维途径。而网络、服务器配置、SSH 服务配置等多种因素均可能会导致 SSH 连接或登录过程出现异常。接下来会先介绍影响 SSH 连接或登录的常见因素,然后说明此类问题的分析处理思路。
如上图所示,多种因素均可能会导致客户端通过 SSH 连接或登录服务器出现异常,包括但不限于:
如果 SSH 无法正常连接或登录,可以参阅上图,通过如下步骤逐一进行排查分析:
通过如下方法做对比分析,以判断是否是客户端软件、软件配置或客户端网络存在异常,导致无法正常 SSH 连接或登录服务器:
通过如下方法对中间网络做判断和对比分析,以判断是否是中间网络引发的异常:
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> |
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> |
通过如下方法,对 SSH 连接相关安全因素进行排查分析:
a. 通过 淘宝 IP 地址库 等网站获取本地网络出口公网 IP 后,到云盾控制台查询相关访问是否被云盾拦截。b. 检查服务器归属安全组规则,确认对客户端做了访问放行。c. 检查服务器内部 iptables 等安全配置,确认对客户端做了访问放行。
通过如下方法,检查 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> |
10.126.3.45:22
,则只能通过内网进行 SSH 登录d. 在系统内通过类似 ssh 127.0.0.1
的方式做对比测试,以判断 SSH 服务连接是否正常:
用法: ssh -p \
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 服务本身运行与监听是正常的。则通过后续步骤做进一步排查分析。
如果确认 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 客户端及服务端的日志进行对比分析和处理。
如果您参阅前述步骤排查分析后,问题还未能解决。烦请记录前述各步骤的测试结果,及相关日志信息或截图,然后 提交工单 联系售后技术支持。