云服务器 ECS Linux SSH 无法远程登录问题排查指引

注意:本文相关配置及说明在 CentOS 6.5 64 bit 操作系统中进行测试,其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档。

注意: SSH 客户端是云服务器 ECS Linux主要的运维途径。管理终端可以用于临时运维,或者在客户端登录出现异常时,用于问题排查分析。

常见的问题现象:
客户端问题
中间网络问题
PAM 安全框架相关问题
Linux 系统环境配置问题
SSH 服务及参数配置问题
SSH 服务关联目录或文件配置问题
SSH 服务密钥配置问题
排查 SSH 无法登录问题步骤
常见的问题现象
下图为 SSH 登录关联因素示意图:

factors

客户端问题
客户端无法正常登录时,先使用不同的 SSH 客户端基于相同账户信息进行登录测试。如果能正常登录,则判断是客户端配置问题,需要对客户端配置或软件运行情况做排查分析。云服务器 ECS Linux 的登录过程说明,参阅登录实例。

中间网络问题
客户端无法正常通过 SSH 连接云服务器时,通过 telnet <服务器 IP> <SSH 服务端口>,比如:telnet 192.168.0.1 22 进行 telnet 端口测试,判断是否是中间网络异常所致。正常情况下,会返回如下图所示的服务端 SSH 软件版本号:

results

如果端口测试失败,参阅下列文档对客户端到服务器之间的网络做进一步排查分析:

ping 丢包或不通时链路测试说明
能 ping 通但端口不通时端口可用性探测说明
网络异常时抓包操作说明
PAM 安全框架相关问题
Linux 系统的 PAM 安全框架,可以加载相关安全模块,对云服务器的账户策略、登录策略等进行访问控制。如果相关配置存在异常,或触发了相关策略,就可能会导致 SSH 登录失败。常见案例如下:

SSH 登录时出现如下错误:pam_listfile(sshd:auth): Refused user root for service sshd
SSH 登录时出现如下错误:requirement “uid >= 1000” not met by user “root”
SSH 登录时出现如下错误:Maximum amount of failed attempts was reached
SSH 登录时出现如下错误:login: Module is unknown
Linux 系统环境配置问题
Linux 内的系统环境(比如中毒、账户配置、环境变量配置等)如果出现异常,也可能会导致 SSH登录失败。见案例如下:

SSH 登录时出现如下错误:ssh_exchange_identification: read: Connection reset by peer
中毒导致 SSH 服务运行异常,出现如下错误:fatal: mm_request_send: write: Broken pipe
SSH 启动时出现如下错误:main process exited, code=exited
SSH 连接时出现如下错误:pam_limits(sshd:session):could not sent limit for ‘nofile’
SSH 连接时出现如下错误:pam_unix(sshdsession) session closed for user
SSH 连接时出现如下错误:error Could not get shadow infromation for root
SSH 服务及参数配置问题
SSH 服务的默认配置文件为 /etc/ssh/sshd_config。配置文件中的相关参数配置异常,或启用了相关特性或策略,也可能会导致 SSH 登录失败。常见案例如下:

SSH 登录时出现如下错误:Disconnected:No supported authentication methods available
SSH 登录时出现如下错误:User root not allowed because not listed in
SSH 登录时出现如下错误:Permission denied, please try again
SSH 登录时出现如下错误:Too many authentication failures for root
SSH 启动时出现如下错误:error while loading shared libraries
SSH 启动时出现如下错误:fatal: Cannot bind any address
SSH 启动时出现如下错误:Bad configuration options
云服务器 ECS Linux SSH 启用 UseDNS 导致连接速度变慢
SSH 服务关联目录或文件配置问题
SSH 服务基于安全性考虑,在运行时,会对相关目录或文件的权限配置、属组等进行检查。过高或过低的权限配置,都可能会引发服务运行异常,进而导致客户端登录失败。常见案例如下:

SSH 登录时出现如下错误:No supported key exchange algorithms
SSH 启动时出现如下错误:must be owned by root and not group or word-writable
SSH 服务密钥配置问题
SSH 服务采用非对称加密技术,对所传输的数据进行加密。客户端及服务端会交换和校验相关密钥信息的有效性。常见案例如下:

SSH 登录时出现如下错误:Host key verification failed
云服务器 ECS Linux SSH 连接交互过程简介
云服务器 ECS Linux SSH 基于密钥交换的自动登录原理简介及配置说明
排查 SSH 无法登录问题步骤
如果根据前述问题场景进行排查和处理后,还是无法正常登录。则建议按照如下步骤进行逐一排查分析:

使用不同的 SSH 客户端及 管理终端 做对比访问测试,判断是否个别客户端自身配置或软件运行问题所致。

参阅中间网络问题相关说明测试网络连通性。

参阅管理终端登录云服务器,在客户端重新访问测试时执行命令 tailf /var/log/secure。
执行命令 ssh -vvv <服务器 IP>,比如,ssh -vvv 192.168.0.1 获取 Linux 环境详细的 SSH 登录交互日志:
通过管理终端 登录云服务器,检查 SSH 服务运行状态:

执行下列命令检查服务运行状态,正常情况下会返回运行状态及相应进程 PID:

[root@centos ~]# service sshd status
openssh-daemon (pid 31350) is running…
[root@centos ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
执行下列命令检查服务监听状态,正常情况下会返回相应端口监听信息:

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)
通过 管理终端登录云服务器,然后 ssh 127.0.0.1。如果能正常登录,则推断是系统防火墙或外部安全组策略等配置异常,导致客户端登录失败。

如问题还未解决,请记录前述各步骤的测试结果,及相关日志信息或截图,提交工单联系阿里云。

收起
相关推荐问题
云服务器 ECS Linux SSH 无法远程登录问题排查指引与 SSH 原理概述
云服务器 ECS-排查 SSH 无法登录问题步骤
云服务器 ECS-SSH 无法远程登录问题处理思路

有帮助

没帮助
我云服务器 ECS-SSH 无法远程登录问题处理思路
云服务器 ECS-SSH 无法远程登录问题处理思路

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

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

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

重启家用路由器,或通过 4G 热点共享的方式,切换到不同的网络做对比测试。
基于相同账户,使用不同的 SSH 客户端软件做对比访问测试。
2. 检查中间网络
通过如下方法对中间网络做判断和对比分析,以判断是否是中间网络引发的异常:

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

  • 如果正常,则说明客户端到服务端的中间链路是正常的。

  • 如果不正常,则可以参阅如下文档针对客户端到服务器之间的网络做进一步排查分析:

  • 正常情况下,如下图所示,会返回服务端 SSH 软件版本号信息:
    telnet SSH 端口测试正常示意图

  • 如果不正常,则说明可能是 SSH 服务异常或被云盾、安全组等拦截所致,则参阅后续步骤继续排查分析。

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

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

  1. SSH 服务与监听状态检查
    通过如下方法,检查 SSH 服务自身运行状态:

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

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

[root@centos ~]# service sshd status
openssh-daemon (pid 31350) is running…
[root@centos ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
c. 通过如下指令检查 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 登录
d. 在系统内通过类似 ssh 127.0.0.1 的方式做对比测试,以判断 SSH 服务连接是否正常:

用法: ssh -p \ 127.0.0.1比如:

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

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

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

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

CentOS 服务器:tailf /var/log/secure
Ubuntu 服务器:tailf /var/log/auth
b. 开启客户端 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

猜你喜欢

转载自blog.csdn.net/weixin_43139183/article/details/87932513