开发者社区> 问答> 正文

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


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

ECS Linux 服务器的登录方式



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


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

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

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


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


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

    SSH 连接登录相关因素



    如上图所示,多种因素均可能会导致客户端通过 SSH 连接或登录服务器出现异常,包括但不限于:
    • 客户端软件或软件配置问题
    • 客户端网络问题
    • 中间链路问题
    • 云盾、ECS 安全组或系统内 iptables 等安全配置问题
    • Linux 系统 PAM 安全模块配置问题
    • Linux 系统环境配置问题
    • SSH 服务及参数配置问题
    • SSH 服务关联的目录或文件的属性配置问题
    • SSH 服务密钥配置问题


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



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

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


    通过如下方法做对比分析,以判断是否是客户端软件、软件配置或客户端网络存在异常,导致无法正常 SSH 连接或登录服务器:
    • 重启家用路由器,或通过 4G 热点共享的方式,切换到不同的网络做对比测试
    • 基于相同账户,使用不同的 SSH 客户端软件做对比访问测试


    2. 检查中间网络


    通过如下方法对中间网络做判断和对比分析,以判断是否是中间网络引发的异常:
    1. ping 服务器 IP ,看是否正常。比如:ping 223.5.5.5
  • telnet <服务器 IP> <ssh 服务端口(默认为="" 22)="" style="box-sizing: border-box;">,看是否正常。比如: telnet 223.5.5.5 22
    • 正常情况下,如下图所示,会返回服务端 SSH 软件版本号信息:
    • 如果不正常,则说明可能是 SSH 服务异常或被云盾、安全组等拦截所致,则参阅后续步骤继续排查分析。


  • 3. 安全配置检查


    通过如下方法,对 SSH 连接相关安全因素进行排查分析:
    1. 通过 淘宝 IP 地址库 等网站获取本地网络出口公网 IP 后,到云盾控制台 查询相关访问是否被云盾拦截
    2. 检查服务器归属安全组规则,确认对客户端做了访问放行。
    3. 检查服务器内部 iptables 等安全配置,确认对客户端做了访问放行。


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


    通过如下方法,检查 SSH 服务自身运行状态:
    1.可以通过 管理终端 进入服务器。
    2.通过如下指令检查 SSH 服务运行状态。如果服务运行正常,则会返回运行状态及相应进程 PID:
    1. [root@centos ~]# service sshd status
    2. openssh-daemon (pid  31350) is running…
    3. [root@centos ~]# service sshd restart
    4. Stopping sshd:                                             [  OK  ]
    5. Starting sshd:                                             [  OK  ]

    3.通过如下指令检查 SSH 服务的端口监听状态。正常情况下会返回相应端口的监听信息:
    1. netstat -ano | grep 0.0.0.0:22
    2. tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      off (0.00/0/0)
    • 0.0.0.0 表示监听所有网卡
    • 如果配置仅监听内网网卡,比如10.126.3.45:22,则只能通过内网进行 SSH 登录

    4.在系统内通过类似 ssh 127.0.0.1 的方式做对比测试,以判断 SSH 服务连接是否正常:
    用法: ssh -p \<ssh 端口号,如果是默认的="" 22,则无需输入\="" style="box-sizing: border-box;"> 127.0.0.1比如:
    1. ssh 127.0.0.1
    2. ssh -p 2022 127.0.0.1

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

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


    如果确认 SSH 服务及外部网络链路正常,则可以通过如下方法,进一步检查 SSH 登录相关的具体错误信息,然后结合历史案例做相应分析和处理:
    1.实时查看 SSH 服务端安全日志:
    通过管理终端进入服务器。通过类似如下指令实时查看 SSH 服务端安全日志:
    1. CentOS 服务器:tailf /var/log/secure
    2. Ubuntu 服务器:tailf /var/log/auth

    2.开启客户端 SSH debug 模式,获取详细登录日志:
    如果客户端是 Linux 环境,则可以通过如下指令,获取详细的 SSH 登录交互日志:
    1. ssh -vvv <服务器 IP>

    比如:
    1. [root@centos~]# ssh -vvv 192.168.0.1
    2. OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
    3. debug1: Reading configuration data /etc/ssh/ssh_config
    4. debug1: Applying options for *
    5. debug2: ssh_connect: needpriv 0
    6. debug1: Connecting to 192.168.0.1 [192.168.0.1] port 22.
    7. debug1: connect to address 192.168.0.1 port 22: Connection timed out
    8. ssh: connect to host 192.168.0.1 port 22: Connection timed out
    9. ...

    3.参阅 历史案例,结合前述步骤获取的 SSH 客户端及服务端的日志进行对比分析和处理。

    工单提交须知


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

    附录:SSH 登录原理


    您可以参阅如下文档,了解 SSH 服务连接登录的相关原理,以便知其然知其所以然,更好的支撑此类问题的排查分析:

    展开
    收起
    boxti 2017-10-23 14:34:32 3283 0
    0 条回答
    写回答
    取消 提交回答
    问答排行榜
    最热
    最新

    相关电子书

    更多
    低代码开发师(初级)实战教程 立即下载
    冬季实战营第三期:MySQL数据库进阶实战 立即下载
    阿里巴巴DevOps 最佳实践手册 立即下载