使用第三方SSH客户端远程连接Linux实例时, 提示“No supported authentication methods available (server sent: publickey, gssapi-keyex, gssapi-with-mic)”错误怎么办?

问题现象

使用第三方SSH客户端远程连接 Linux 实例时,账号和密码正确,但连接被拒绝,并返回以下任一类似错误信息:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic) #错误信息 1: 尝试的认证方法均被服务器拒绝。
No supported authentication methods available (server sent: publickey,gssapi-keyex,gssapi-with-mic) #错误信息 2:未能找到共同支持的认证方法。
Connection closed by XX.XX.XX.XX # 错误信息 3: 服务器在认证阶段主动关闭了连接。

解决方案

  • 密码登录失败:检查实例配置,确认是否已禁止密码登录。

  • 密钥登录失败

    1. 检查实例配置,确认是否已禁止密钥登录。

    2. 检查目标用户的 ~/.ssh/authorized_keys 文件,确认公钥已正确添加。

场景一:密码登录失败

  1. 登录ECS实例。

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

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

  2. 启用密码认证。

    编辑SSH配置文件。确保PasswordAuthentication 参数的值为 yes。如果该行被注释,请先移除行首的 # 符号。

    sudo vim /etc/ssh/sshd_config
  3. 重启SSH服务,使配置生效。

    • Alibaba Cloud Linux、CentOS类型。

      sudo systemctl restart sshd.service
    • Debian、Ubuntu类型。

      sudo systemctl restart ssh.service
  4. 问题验证。

    在第三方SSH客户端再次使用密码远程连接Linux实例,验证问题是否解决。

场景二:密钥登录失败

  1. 登录ECS实例。

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

    2. 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。

  2. 修改SSH文件,允许密钥方式登录。

    1. 编辑SSH配置文件。

      sudo vim /etc/ssh/sshd_config
    2. 在编辑模式下,找到 PubkeyAuthentication 参数。

  3. 复制公钥到用户authorized_keys文件。

    root用户

    1. 编辑authorized_keys文件。

      sudo vim /root/.ssh/authorized_keys

      将公钥内容粘贴到文件中,每个公钥占一行。配置完成后保存并关闭文件。

    2. 设置文件权限。

      错误的权限会导致 SSH 登录失败。

      sudo chmod 700 /root/.ssh
      sudo chmod 600 /root/.ssh/authorized_keys

    root用户

    命令中<username>替换为待使用公钥登录的用户名。
    1. 编辑authorized_keys文件。

      sudo vim /home/<username>/.ssh/authorized_keys

      将公钥内容粘贴到文件中,每个公钥占一行。配置完成后保存并关闭文件。

    2. 设置文件权限。

      错误的权限会导致 SSH 登录失败。

      sudo chown -R <username>:<username> /home/<username>/.ssh
      sudo chmod 700 /home/<username>/.ssh
      sudo chmod 600 /home/<username>/.ssh/authorized_keys
  4. 重启SSH服务,使配置生效。

    • Alibaba Cloud Linux、CentOS类型。

      sudo systemctl restart sshd.service
    • Debian、Ubuntu类型。

      sudo systemctl restart ssh.service
  5. 问题验证。

    在第三方SSH客户端再次使用密钥远程连接Linux实例,验证问题是否解决。