无法连接Linux实例

无法连接Linux实例

更新时间:2020-06-11 10:01:08

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

概述

本文主要介绍无法远程登录Linux实例的案例和排查方法。

详细信息

本文主要通过如下2个方面解决无法远程登录Linux实例的问题。

常见报错案例

SSH无法远程登录Linux实例的常见案例如下所示,可根据实际报错信息选择不同的方案进行排查和处理。

PAM安全框架

Linux系统的PAM安全框架可以加载相关安全模块,对云服务器的账户策略、登录策略等进行访问控制。如果相关配置存在异常,或触发了相关策略,就可能会导致SSH登录失败。根据不同报错信息,可参见如下常见案例进行解决。

Linux系统环境配置

Linux内的系统环境,例如中毒、账户配置、环境变量配置等,如果出现异常,也可能会导致SSH登录失败。根据不同报错信息,可参见如下常见案例进行解决。

SSH服务及参数配置

SSH服务的默认配置文件为/etc/ssh/sshd_config。配置文件中的相关参数配置异常,或启用了相关特性或策略,也可能会导致 SSH登录失败。根据不同报错信息,可参见如下常见案例进行解决。

SSH服务关联目录或文件配置

SSH服务基于安全性考虑,在运行时,会对相关目录或文件的权限配置、属组等进行检查。过高或过低的权限配置,都可能会引发服务运行异常,进而导致客户端登录失败。根据不同报错信息,可参见如下常见案例进行解决。

SSH服务密钥配置

SSH服务采用非对称加密技术,对所传输的数据进行加密。客户端及服务端会交换和校验相关密钥信息的有效性。根据不同报错信息,可参见如下常见案例进行解决。

排查方法

常见报错案例没有解决问题,可以参考如下流程排查问题。

说明:

  • 以下操作在CentOS 6.5 64位操作系统中进行过测试,在其他Linux发行版中可能存在差异,具体情况请参阅对应Linux发行版的官方文档。
  • 客户端SSH连接Linux实例是运维操作的主要途径。通过管理终端可以用于临时运维操作,或者在客户端SSH登录异常时,用于问题排查和分析。
  • 下图为SSH登录关联因素示意图。由此可见,通过SSH无法远程登录Linux实例时,可能涉及的关联因素较多。

检查CPU负载、带宽及内存使用情况

  • 确认是否存在CPU负载过高的情况,如果存在,则参考本步骤解决问题,如果不存在,则执行下一步步骤。
    说明:您无法主动监控系统内部的程序运行状态,但是可以借助云监控进行查看。
    1. 登录云监控控制台,依次选择主机监控>进程监控
    2. 查看应用运行情况,排除CPU负载过高的原因,如何查看CPU负载问题,请参见Linux系统ECS实例CPU使用率较高的排查思路
      说明:在某个时间段CPU负载过高可能导致远程连接失败,建议您查询程序或者实例资源是否不满足现有要求。
  • 无法远程连接可能是公网带宽不足导致的,具体排查方法如下。可通过续费ECS实例,然后重启实例解决。详情参见手动续费或者自动续费

    1. 登录ECS管理控制台
    1. 找到该实例, 单击管理进入实例详情页面,查看网络监控数据。
    1. 检查服务器带宽是否为“1k”或“0k”。如果购买实例时没有购买公网带宽,后来升级了公网带宽,续费的时候没有选择续费带宽,带宽就会变成“1k”。
  • 远程连接输入用户密码登录后,不能正常显示桌面直接退出,也没有错误信息。这种情况可能是服务器内存不足导致的,需要查看一下服务器的内存使用情况。具体操作如下:
    1. 使用控制台远程连接功能登录到Linux实例。
    2. 查看内存使用情况,具体请参见Linux系统的ECS实例中如何查看物理CPU和内存信息,确认内存不足后,再进行处理。

客户端排查

客户端无法正常登录时,先使用不同的SSH客户端基于相同账户信息进行登录测试。如果能正常登录,则判断是客户端配置问题,需要对客户端配置或软件运行情况做排查分析。关于如何使用客户端SSH登录Linux实例,您可以参见远程连接Linux实例

步骤一:使用管理终端登录实例

无论何种原因导致无法远程连接实例,请先尝试用阿里云提供的远程连接功能进行连接,确认实例还有响应,没有完全宕机,然后再按原因分类进行故障排查。

  1. 登录云服务器管理控制台,单击左侧导航栏中的实例,然后在目标实例右侧单击远程连接
  2. 在首次连接或忘记连接密码时,单击修改远程连接密码,修改远程连接的密码。
  3. 然后通过远程连接密码连接实例。
步骤二:检查客户端本地网络是否异常

确认是否存在用户本地无法连接外网的故障。

  • 如果存在,则检查网卡驱动,如果存在异常,则重新安装。使用管理终端登录实例,查看/etc/hosts.deny文件,查看是否存在拦截IP,如果存在则删除此IP配置即可。
  • 如果不存在,则执行下一步步骤。
步骤三:重启实例

在确保登录密码正确的情况下,确认之前是否曾重置过密码。检查重置实例密码后是否未重启实例,如果存在实例密码修改记录,但无重启实例记录,则参考以下操作步骤重启实例。

  1. 登录ECS管理控制台,单击左侧导航栏中的实例
  2. 在页面顶部的选择对应的地域,目标实例右侧单击更多>实例状态>重启,再单击确认即可。

中间网络

中间网络包括网络检查和端口检查。

网络检查

无法正常远程连接Linux实例时,需要先检查网络是否正常。

  1. 用其他网络环境中,不同网段或不同运营商的电脑连接对比测试,判断是本地网络问题还是服务器端的问题。如果是本地网络问题或运营商问题,请联系本地IT人员或运营商解决。如果是网卡驱动存在异常,则重新安装。排除本地网络故障后进行下一步检查。
  2. 在客户端使用ping命令测试与实例的网络连通性。
端口检查

网络检查正常后,进一步检查端口是否正常。

  1. 使用管理终端登录实例,执行如下命令,编辑SSH配置文件。
    vi /etc/ssh/sshd_config
  2. 找到“#port 22”所在行,检查默认端口22是否被修改,且前面的“#”是否删除,如果没有删除,可以把前面的“#”删除,然后将22改为其它的端口,再保存退出即可。
    说明:服务监听能使用的端口范围为0到65535,错误配置监听端口会导致远程桌面服务监听失败。
  3. 执行如下命令,重启SSH服务。
    /etc/init.d/sshd restart
    说明:也可执行service sshd restart命令,重启SSH服务。
  4. 使用Python自带的Web服务器用于临时创建新的监听端口进行测试。
    python -m SimpleHTTPServer [$Port]
  5. 如果登录方式改变或者ECS安全组规则中未放行修改后的端口号,则参考如下步骤放行修改后的端口。
    说明:ECS的安全组规则中默认放行22端口。修改了远程桌面的端口后,需要在安全组规则中放行修改后的端口号。
    1. 登录ECS管理控制台
    2. 找到该实例,单击管理进入实例详情页面,切换到本实例安全组标签页,单击配置规则
    3. 在安全组规则页面,单击添加安全组规则
    4. 在弹出的页面中,端口范围输入修改后的远程桌面端口号。授权对象输入客户端的公网IP地址。例如修改后的远程桌面端口号为2222,则端口范围应输入“2222/2222”。填写完成后,单击确定
  6. 通过上一步获取的端口,参考如下命令,进行端口测试,判断端口是否正常。如果端口测试失败,请参见使用ping命令正常但端口不通时的端口可用性探测说明进行排查。
    telnet [$IP] [$Port]
    说明
    • [$IP]指Linux实例的IP地址。
    • [$Port]指Linux实例的SSH端口号。
    系统显示类似如下,例如执行telnet 192.168.0.1 22命令,正常情况下,系统会返回服务端中SSH的软件版本号。

安全组检查

检查安全组配置,是否允许远程连接的端口。

  1. 参见查询安全组规则,查看安全组规则。如果远程连接端口没有进行配置,则参见Linux实例启用SSH服务后设置对应的安全组策略配置。
  2. 确认是否存在无法ping通ECS实例,在排除Iptables和网卡IP配置问题且回滚系统后,仍然无法ping通。可能是ECS实例安全组默认的公网规则被删除,则需要重新配置ECS实例的安全组公网规则,具体操作请参见ECS实例安全组默认的公网规则被删除导致无法ping通。如果不存在,则继续下一步骤检查。

问题案例

如果根据前述问题场景进行排查和处理后,还是无法正常登录。则建议按照如下步骤逐一排查和分析:

  1. 使用不同的客户端SSH及管理终端做对比访问测试,判断是否是个别客户端自身配置或软件运行问题所致。
  2. 参见中间网络问题相关说明,测试网络连通性。
  3. 参见管理终端,登录云服务器,在客户端进行访问测试的同时,执行如下命令,查看相关日志。
     tailf /var/log/secure
  4. 参考如下命令, 例如ssh -v 192.168.0.1 命令,获取Linux环境中详细的SSH登录交互日志。
    ssh -v [$IP]
  5. 通过管理终端登录Linux实例,参考如下步骤,检查SSH服务运行状态。
    1. 执行如下命令,检查服务运行状态。
      service sshd status
      service sshd restart
      正常情况下会返回SSH服务的运行状态及进程PID,系统显示类似如下。
      [root@centos ~]# service sshd status
      openssh-daemon (pid   31350) is running...
      [root@centos ~]# service sshd restart
      Stopping sshd:                                             [  OK  ]
      Starting sshd:                                             [  OK  ]
    1. 执行如下命令,检查服务监听状态。
      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)
    1. 通过管理终端登录Linux实例,执行如下命令。如果能正常登录,则推断是系统防火墙或外部安全组策略等配置异常,导致客户端登录失败。
      ssh 127.0.0.1

 

若用阿里云提供的远程连接功能仍无法成功连接实例,请尝试重启实例。重启操作会使实例停止工作,从而中断业务,请谨慎执行。

说明:重启实例前,需给实例创建快照,用于数据备份或者制作镜像。创建快照的方法请参见创建快照

  1. 登录ECS管理控制台,单击左侧导航栏中的实例
  2. 在页面顶部的选择对应的地域,在目标实例右侧单击更多>实例状态>重启,再单击确认即可。

适用于

  • 云服务器ECS