You need to enable JavaScript to run this app.
导航
SSH配置问题导致无法登录解决方案
最近更新时间:2024.10.28 16:07:40首次发布时间:2024.05.21 10:39:47

本文主要介绍如何排查和解决,Linux实例由于SSH配置或者系统参数设置不合理导致的无法登录问题,包括SSH访问权限异常、SSH关键文件或目录丢失、SSH登录报错、实例中的服务进程未处于运行中等。

前提条件

如果您需对实例进行配置与数据修改,建议您先创建快照,以便提高容错能力,确保数据安全。

SSH访问权限异常

由于SSH的访问权限配置异常,比如访问权限配置不足,导致的无法登录Linux实例时,您可以按照如下方式解决。

  1. 单用户进入Linux操作系统,详情请参见进入单用户模式

  2. 执行以下命令,重置/var/empty/sshd目录的权限。

    chmod 711 /var/empty/sshd
    
  3. 重启实例使设置生效。

SSH关键文件或目录丢失

由于SSH访问所需关键文件或目录丢失,即不存在sshd_config配置文件,导致无法登录Linux实例时,您可以按照如下方式解决。

  1. 单用户进入Linux操作系统,详情请参见进入单用户模式

  2. 执行以下命令,检查是否存在sshd_config配置文件。

    ll /etc/ssh/sshd_config
    
  3. (可选)如果存在sshd_config配置文件,跳过该步骤;如果不存在sshd_config文件,且您也无已备份的sshd_config.bak文件,请进行如下操作:

    1. 执行以下命令重新安装openssh-server服务。

      • Debian系统:sudo apt-get install --reinstall openssh-server

      • CentOS系统:yum reinstall openssh-server

    2. 重启实例使设置生效。

SSH登录报错

root用户通过本地SSH客户端登录Linux系统的ECS实例时,密码正确,但出现Permission denied, please try again错误信息,或“SSH服务器拒绝了密码,请再试一次”问题时,您可以按照如下方式解决。

导致该问题原因可能是ECS实例内禁用root用户登录,或Linux系统启用了SELinux服务,导致root用户和普通用户无法登录。

禁止root用户登录引起的问题

  1. 登录目标实例,操作详情可参考登录Linux实例

  2. 执行以下命令,查看PermitRootLoginPasswordAuthentication配置。

    cat /etc/ssh/sshd_config
    
  3. 如果PermitRootLoginPasswordAuthentication参数设置为no,表示禁止root用户登录,也禁止以密码方式登录,请继续以下操作。反之,请跳过本小节,在SELinux服务引起的问题中排查并解决。

  4. 修改PermitRootLoginPasswordAuthentication参数配置。

    1. 执行以下命令,打开SSH配置文件。
    vi /etc/ssh/sshd_config
    
    1. 修改PermitRootLoginPasswordAuthentication参数值配置。

      • 如果需要root用户登录,请将PermitRootLogin参数值设置为yes

      • 如果需要密码方式登录,请将PasswordAuthentication参数值设置为yes

    2. 按“Esc”按键,输入:wq保存修改。

  5. 执行如下命令,重启SSH服务后生效。

    systemctl restart sshd.service
    

SELinux服务引起的问题

您可以根据实际情况,选择临时或永久关闭SELinux服务解决SSH连接异常问题。

步骤一:检查SELinux服务状态

  1. 登录目标实例,操作详情可参考登录Linux实例

  2. 执行如下命令,查看当前SELinux服务状态。

    /usr/sbin/sestatus -v
    
  3. 回显类似如下信息:

    SELinux status:       enabled
    
    SELinux status:       disabled
    
    • enabled:SELinux服务处于开启状态。

    • disabled:SELinux服务处于关闭状态。

步骤二:关闭SELinux服务
您可以根据实际情况临时关闭SELinux服务(重启后会失效)或永久关闭SELinux服务。

  • 临时关闭SELinux服务
    执行如下命令,临时关闭SELinux。

    setenforce 0
    
  • 永久关闭SELinux服务

    1. 执行如下命令,永久关闭SELinux服务。
    vim /etc/selinux/config
    
    SELINUX=disabled
    
    1. 输入:wq保存。
    2. 重启实例使设置生效。

服务进程未处于运行中

当服务进程未处于运行中(未处于监听状态)时,可能导致您无法访问Linux实例,您可以通过启动常见服务的方法解决该类问题,下文以CentOS 7系统为例说明。

操作说明

以下列举Linux实例中常见的服务以及对应服务未运行时产生的影响。

服务名称描述默认监听的端口未运行时的影响
SSH远程连接22无法通过SSH远程连接
WebWeb网站服务80(HTTP)、443(HTTPS)无法访问网站
MySQLMySQL数据库3306无法访问数据库

操作步骤

  1. 登录目标实例,操作详情可参考登录Linux实例

  2. 执行以下命令,检查目标服务的端口监听状态。

    netstat -ntlp | grep [$Port]
    

    [$Port]指目标服务监听的端口,请以实际情况为准。如果您修改过目标服务默认的端口,请替换为修改后的端口号。

    • 如果返回目标端口信息,并且监听状态为LISTEN,则说明目标服务已经处于运行状态,不需要启动,请跳过以下步骤。
    • 如果无返回结果,即目标服务的端口未处于监听状态,请继续进行如下操作。
  3. 执行以下命令,启动目标服务。

    systemctl start [$Service]
    

    说明

    • [$Service]指目标服务的名称,以实际情况为准。

    • 如果需启动的是SSH服务,则服务名称为sshd

    • 如果需启动的是第三方服务,例如“Nginx”、“Tomcat”、“MySQL”等,请查阅第三方服务的官方网站,获取对应的启动命令。

    • 如果无返回结果,则表示命令执行成功,跳过以下步骤。
    • 如果返回错误,参考错误提示进行修复后,继续进行如下操作。
  4. 执行以下命令,检查目标服务的状态。

    systemctl status [$Service]
    
  5. 返回结果如下图,表示目标服务处于running状态。

    此处以SSH服务为例,请以实际情况为准。

  6. 执行以下命令,检查目标服务的端口监听状态。

    netstat -ntlp | grep [$Port]
    
  7. 返回结果如下图,表示目标服务的端口处于监听状态,即目标服务已经处于运行状态。