如何解决使用第三方SSH客户端登录Linux实例时提示“Access denied”错误?

问题现象

  • 远程登录失败:使用第三方 SSH 客户端(如 PuTTY, Xshell, SecureCRT)连接 Linux 实例时,客户端提示Access deniedPermission denied, please try again.错误。

  • 系统安全日志:系统日志/var/log/secure中包含not allowed because等相关信息。

问题原因

默认情况下,Linux 实例的 SSH 服务允许系统上所有用户账户通过凭证(密码或密钥)进行登录。当SSH服务配置文件/etc/ssh/sshd_config中启用了登录限制策略时,配置不当会导致特定用户无法登录实例。

  • AllowUsers:用户白名单,仅允许列表中的用户登录。

  • DenyUsers:用户黑名单,拒绝列表中的用户登录。

  • AllowGroups:用户组白名单,仅允许列表中的用户组中的用户登录。

  • DenyGroups:用户组黑名单,拒绝列表中的用户组中的用户登录。

拒绝策略(Deny*)的优先级高于允许策略(Allow*)。如果一个用户同时满足允许和拒绝的条件,该用户将被拒绝登录。

解决方案

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

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

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

  2. 检查并修改SSH配置文件。

    1. 备份配置文件,以便在修改错误时快速恢复。

      sudo cp /etc/ssh/sshd_config  /etc/ssh/sshd_config.bak
    2. 定位并调整访问控制策略。

      sudo vi /etc/ssh/sshd_config

      选择以下任一方式进行修改:

      • 方式一:注释所有限制规则

        若不需要登录限制,在AllowUsersDenyUsersAllowGroups以及DenyGroups参数行的行首添加#符号将其注释掉,让所有系统用户都能登录。

        # AllowUsers userA userB
        # DenyUsers userC
      • 方式二:修正限制规则

        为确保策略的明确性,应避免同时使用白名单(Allow*)和黑名单(Deny*)规则。

        • 使用白名单策略(用于只允许少数用户登录的场景)

          仅保留AllowUsersAllowGroups参数,将需要登录的用户或用户组添加到列表中,同时注释或删除所有Deny*参数。

           AllowUsers userA userB newUser
           # DenyUsers userC 
          以上示例表示仅允许userAuserBnewUser三个用户登录,其他所有用户都无法登录。
        • 使用黑名单策略(用于只拒绝少数用户登录的场景)

          仅保留DenyUsersDenyGroups参数,将需要禁止登录的用户或用户组添加到列表中,同时注释或删除所有Allow*参数。

          # AllowUsers userA userB
           DenyUsers userC userD
          以上示例表示拒绝userCuserD用户登录,其他所有用户都可以登录。
  3. 重启SSH服务,使配置生效。

    sudo systemctl restart sshd.service
    若启动报错,可通过cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config命令恢复原配置文件。
  4. 使用第三方SSH客户端重新登录实例,验证登录是否正常。