如何解决SSH登录Linux实例时的“Permission denied,please try again”错误?

问题现象

通过SSH远程连接Linux实例时,即使输入正确的用户名和密码,连接请求仍被服务端拒绝,返回Permission denied, please try again

问题诊断

  1. 通过VNC连接登录ECS实例。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 进入目标实例详情页,单击远程连接,选择通过VNC远程连接。输入账号和密码,登录ECS实例。

  2. 检查SSH服务配置。

    若配置中的PermitRootLoginPasswordAuthentication参数被设置为no,请参考场景一:SSH配置禁止登录进行修复。

    • PermitRootLogin:若设置为no,则禁止root用户通过SSH登录。

    • PasswordAuthentication:若设置为no,则禁止所有用户使用密码方式登录。

    sudo cat /etc/ssh/sshd_config
  3. 检查系统安全日志。

    SELinux策略阻止登录时,会在系统安全日志中记录错误信息。

    SELinux策略是一套强制访问控制规则,它定义了系统中每个进程允许对哪些文件、端口或其他资源执行哪些具体操作。
    # 对于CentOS/RHEL系统
    sudo grep -iE --color=auto 'Could not get shadow information' /var/log/secure
    
    # 对于Debian/Ubuntu系统
    sudo grep -iE --color=auto 'Could not get shadow information' /var/log/auth.log

    若无返回信息,则表明问题可能由SELinux策略引起,请参考场景二:SELinux策略阻止登录进行修复。

问题修复

场景一:SSH配置禁止登录

  1. 修改配置

    sudo vi /etc/ssh/sshd_config

    根据业务需求调整参数:

    • 允许密码认证:将PasswordAuthentication no修改为PasswordAuthentication yes

    • 允许root用户登录:

      • 允许密钥认证(推荐):若计划使用密钥登录root账号,可设置为PermitRootLogin prohibit-password

      • 允许密码认证:将PermitRootLogin no修改为PermitRootLogin yes

        重要

        修改SSH配置以允许root用户通过密码登录(PermitRootLogin yes)会使实例面临更高的暴力破解攻击风险。建议优先考虑使用密钥认证或限制IP访问来源

    修改完成后,按Esc键,输入:wq保存并退出文本编辑器。

  2. 检查配置并重启服务

    1. 检查配置文件语法是否正确。若未返回任何错误,表示语法正确。

      sudo sshd -t
    2. 重载服务使配置生效。

      sudo systemctl restart sshd
  3. 验证连接

    再次通过SSH远程连接实例,验证是否可以连接成功。

场景二:SELinux策略阻止登录

  1. 检查SELinux当前状态

    确认SELinux是否处于enforcing(强制)模式。

    sudo sestatus

    若回执信息中的SELinux statusenabledCurrent modeenforcing,则表明SELinux策略正在生效。

  2. 临时调整SELinux模式以恢复访问

    SELinux临时切换到permissive(宽容)模式,SELinux只记录警告而不强制阻止操作。

    sudo setenforce 0
    重要

    该命令仅临时调整状态,重启失效。

    执行后,通过SSH重新登录。如果登录成功,则证明问题由SELinux引起。

  3. 永久修改SELinux配置(可选)

    1. 修改配置文件:将SELinux的默认模式从enforcing修改为permissive

      sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
    2. 重启实例:使配置文件修改生效。

  4. 验证连接

    再次通过SSH远程连接实例,验证是否可以连接成功。