SSH 无法远程登录问题的处理思路-阿里云开发者社区

开发者社区> 阿里云支持与服务> 正文
登录阅读全文

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

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

14191e82b9ab8555e9826e9170c52be48a6d39d1

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

ECS Linux 服务器的登录方式

ECS Linux 不同登录方式示意图

ECS Linux 不同登录方式示意图

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


1.管理终端(远程连接)

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

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

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

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

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

SSH 连接登录相关因素

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

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

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

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

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

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

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

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

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

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

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

2. 检查中间网络

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

  1. ping 服务器 IP ,看是否正常。比如:ping 223.5.5.5
  2. telnet <服务器 IP> ,看是否正常。比如: telnet 223.5.5.5 22
    • 正常情况下,如下图所示,会返回服务端 SSH 软件版本号信息: telnet SSH 端口测试正常示意图
    • 如果不正常,则说明可能是 SSH 服务异常或被云盾、安全组等拦截所致,则参阅后续步骤继续排查分析。

3. 安全配置检查

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

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

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

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

  1. 可以通过 管理终端 进入服务器。
  2. 通过如下指令检查 SSH 服务运行状态。如果服务运行正常,则会返回运行状态及相应进程 PID:

    [root@centos ~]# service sshd status
    openssh-daemon (pid 31350) is running…
    [root@centos ~]# service sshd restart
    Stopping sshd: [ OK ]
    Starting sshd: [ OK ]
  3. 通过如下指令检查 SSH 服务的端口监听状态。正常情况下会返回相应端口监听信息:

    netstat -ano | grep 0.0.0.0:22
    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,则无需输入> 127.0.0.1 比如:

ssh 127.0.0.1
ssh -p 2022 127.0.0.1

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

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

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

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

    CentOS 服务器:tailf /var/log/secure
    Ubuntu 服务器:tailf /var/log/auth
  2. 开启客户端 SSH debug 模式,获取客户端详细登录日志:
    如果客户端是 Linux 环境,则可以通过如下指令,获取详细的 SSH 登录交互日志:

    ssh -vvv <服务器 IP>

    比如:

    [root@centos~]# ssh -vvv 192.168.0.1
    OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug2: ssh_connect: needpriv 0
    debug1: Connecting to 192.168.0.1 [192.168.0.1] port 22.
    debug1: connect to address 192.168.0.1 port 22: Connection timed out
    ssh: connect to host 192.168.0.1 port 22: Connection timed out
    ...
  3. 参阅 历史案例,结合前述步骤获取的 SSH 客户端及服务端的日志进行对比分析和处理。

附录:SSH 登录原理

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

本期分享专家:本期分享专家:五贤,搞过开发,玩过小机、AIX,目前在阿里云从事云产品技术支持,专注于云计算相关的系统运维。奉行“上天给了人两只手,两只眼,而只有一张嘴。就是要让我们多动手,多观察,少耍嘴皮。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

分享阿里云支持与服务团队最佳实践、经典案例与故障排查。

官方博客
文档