免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
概述
本文主要介绍无法远程登录Linux实例的案例和排查方法。
详细信息
本文主要通过如下2个方面解决无法远程登录Linux实例的问题:
常见报错案例
SSH无法远程登录Linux实例的常见案例如下所示,可根据实际报错信息选择不同的方案进行排查和处理:
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导致连接速度变慢
- Linux实例中由于SELinux服务开启导致SSH远程连接异常
SSH服务关联目录或文件配置
SSH服务基于安全性考虑,在运行时,会对相关目录或文件的权限配置、属组等进行检查。过高或过低的权限配置,都可能会引发服务运行异常,进而导致客户端登录失败。根据不同报错信息,可参见如下常见案例进行解决:
- SSH登录时出现如下错误:No supported key exchange algorithms
- SSH启动时出现如下错误:must be owned by root and not group or word-writable
SSH服务密钥配置
SSH服务采用非对称加密技术,对所传输的数据进行加密。客户端及服务端会交换和校验相关密钥信息的有效性。根据不同报错信息,可参见如下常见案例进行解决:
排查方法
若常见报错案例没有解决问题,可以参考如下流程排查问题:
说明:
- 以下操作在CentOS 6.5 64位操作系统中进行过测试,在其他Linux发行版中可能存在差异,具体情况请参阅对应Linux发行版的官方文档。
- 客户端SSH连接Linux实例是运维操作的主要途径。通过管理终端可以用于临时运维操作,或者在客户端SSH登录异常时,用于问题排查和分析。
- 下图为SSH登录关联因素示意图。由此可见,通过SSH无法远程登录Linux实例时,可能涉及的关联因素较多。
检查CPU负载、带宽及内存使用情况
- 确认是否存在CPU负载过高的情况。关于如何检查CPU负载及排查,请参见Linux系统CPU负载的查询和案例分析。
- 如果在某个时间段CPU负载过高,可能导致远程连接失败,建议您查询程序或者实例资源是否不满足现有要求。
- 如果不存在CPU负载过高的情况,则继续下一步检查。
-
无法远程连接可能是公网带宽不足导致的,具体排查方法如下。可通过续费ECS实例,然后重启实例解决。详情参见手动续费或者自动续费。
- 登录ECS管理控制台。
- 找到该实例, 单击管理进入实例详情页面,查看网络监控数据。
- 检查服务器带宽是否为“1k”或“0k”。如果购买实例时没有购买公网带宽,后来升级了公网带宽,续费的时候没有选择续费带宽,带宽就会变成“1k”。
- 远程连接输入用户密码登录后,不能正常显示桌面直接退出,也没有错误信息。这种情况可能是服务器内存不足导致的,需要查看一下服务器的内存使用情况。具体操作如下:
- 使用控制台远程连接功能登录到Linux实例。
- 查看内存使用情况,具体请参见Linux系统的ECS实例中如何查看物理CPU和内存信息,确认内存不足后,再进行处理。
客户端排查
客户端无法正常登录时,先使用不同的SSH客户端基于相同账户信息进行登录测试。如果能正常登录,则判断是客户端配置问题,需要对客户端配置或软件运行情况做排查分析。关于如何使用SSH客户端登录Linux实例,您可以参见远程连接Linux实例。
步骤一:使用管理终端登录实例
无论何种原因导致无法远程连接实例,请先尝试用阿里云提供的远程连接功能进行连接,确认实例还有响应,没有完全宕机,然后再按原因分类进行故障排查。
- 登录云服务器管理控制台,单击左侧导航栏中的实例,然后在目标实例右侧单击远程连接。
- 在首次连接或忘记连接密码时,单击修改远程连接密码,修改远程连接的密码。
- 然后通过远程连接密码连接实例。
步骤二:检查客户端本地网络是否异常
确认是否存在用户本地无法连接外网的故障。
- 如果存在,则检查网卡驱动,如果存在异常,则重新安装。使用管理终端登录实例,查看
/etc/hosts.deny
文件,查看是否存在拦截IP,如果存在则删除此IP配置即可。 - 如果不存在,则继续下一步检查。
步骤三:重启实例
在确保登录密码正确的情况下,确认之前是否曾重置过密码。检查重置实例密码后是否未重启实例,如果存在实例密码修改记录,但无重启实例记录,则参考以下操作步骤重启实例:
- 登录ECS管理控制台,单击左侧导航栏中的实例。
- 在页面顶部的选择对应的地域,目标实例右侧单击更多>实例状态>重启,再单击确定即可。
中间网络
中间网络包括网络检查和端口检查。
网络检查
无法正常远程连接Linux实例时,需要先检查网络是否正常。
- 用其他网络环境中,不同网段或不同运营商的电脑连接对比测试,判断是本地网络问题还是服务器端的问题。如果是本地网络问题或运营商问题,请联系本地IT人员或运营商解决。如果是网卡驱动存在异常,则重新安装。排除本地网络故障后进行下一步检查。
- 在客户端使用ping命令测试与实例的网络连通性。
- 网络异常时,请参见网络异常时如何抓取数据包进行排查。
- 当出现ping丢包或ping不通时,请参见使用ping命令丢包或不通时的链路测试方法进行排查。
- 如果出现间歇性丢包,ECS实例的网络一直处于不稳定状态时,请参见使用ping命令测试ECS实例的IP地址间歇性丢包进行解决。
- 系统内核没有禁ping的情况下,使用ping命令测试ECS服务器,发现网络不通,请参见Linux系统的ECS中没有禁PING却PING不通的解决方法。
端口检查
网络检查正常后,进一步检查端口是否正常。
- 使用管理终端登录实例,执行如下命令,编辑SSH配置文件。
vi /etc/ssh/sshd_config
- 找到“#port 22”所在行,检查默认端口22是否被修改,且前面的“#”是否删除,如果没有删除,可以把前面的“#”删除,然后将22改为其它的端口,再保存退出即可。
说明:服务监听能使用的端口范围为0到65535,错误配置监听端口会导致远程桌面服务监听失败。
- 执行如下命令,重启SSH服务。
/etc/init.d/sshd restart
说明:也可执行
service sshd restart
命令,重启SSH服务。 - 使用Python自带的Web服务器创建临时的监听端口进行测试。
python -m SimpleHTTPServer [$Port]
- 如果ECS安全组规则中未放行修改后的端口号,需要将修改后的端口号添加到ECS安全组规则中。关于如何设置ECS安全组,请参见添加安全组规则。
说明:ECS的安全组规则中默认放行22端口。修改了远程桌面的端口后,需要在安全组规则中放行修改后的端口号。
- 通过上一步获取的端口,参考如下命令,进行端口测试,判断端口是否正常。如果端口测试失败,请参见使用ping命令正常但端口不通时的端口可用性探测说明进行排查。
telnet [$IP] [$Port]
说明:
系统显示类似如下,例如执行
- [$IP]指Linux实例的IP地址。
- [$Port]指Linux实例的SSH端口号。
telnet 192.168.0.1 22
命令,正常情况下,系统会返回服务端中SSH的软件版本号。
安全组检查
检查安全组配置,是否允许远程连接的端口。
- 参见查询安全组规则,查看安全组规则。如果远程连接端口没有进行配置,则参见Linux实例启用SSH服务后设置对应的安全组策略配置。
- 确认是否存在无法ping通ECS实例,在排除Iptables和网卡IP配置问题且回滚系统后,仍然无法ping通。可能是ECS实例安全组默认的公网规则被删除,则需要重新配置ECS实例的安全组公网规则,具体操作请参见ECS实例安全组默认的公网规则被删除导致无法ping通。如果不存在,则继续下一步骤检查。
问题案例
如果根据前述问题场景进行排查和处理后,还是无法正常登录。则建议按照如下步骤逐一排查和分析:
- 使用不同的客户端SSH及管理终端做对比访问测试,判断是否是个别客户端自身配置或软件运行问题所致。
- 参见中间网络问题相关说明,测试网络连通性。
- 参见管理终端,登录云服务器,在客户端进行访问测试的同时,执行如下命令,查看相关日志。
tailf /var/log/secure
- 参考如下命令, 例如
ssh -v 192.168.0.1
命令,获取Linux环境中详细的SSH登录交互日志。ssh -v [$IP]
- 通过管理终端登录Linux实例,参考如下步骤,检查SSH服务运行状态。
-
- 执行如下命令,检查服务运行状态。
service sshd status
正常情况下会返回SSH服务的运行状态及进程PID,系统显示类似如下。
service sshd restart[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)
- 执行如下命令,检查服务监听状态。
-
- 通过管理终端登录Linux实例,执行如下命令。如果能正常登录,则推断是系统防火墙或外部安全组策略等配置异常,导致客户端登录失败。
ssh 127.0.0.1
- 通过管理终端登录Linux实例,执行如下命令。如果能正常登录,则推断是系统防火墙或外部安全组策略等配置异常,导致客户端登录失败。
若用阿里云提供的远程连接功能仍无法成功连接实例,请尝试重启实例。重启操作会使实例停止工作,从而中断业务,请谨慎执行。
说明:重启实例前,需给实例创建快照,用于数据备份或者制作镜像。创建快照的方法请参见创建快照。
- 登录ECS管理控制台,单击左侧导航栏中的实例。
- 在页面顶部的选择对应的地域,在目标实例右侧单击更多>实例状态>重启,再单击确定即可。
适用于
- 云服务器ECS