什么导致 SSH 权限被拒绝 (publickey,gssapi-keyex,gssapi-with-mic)?
尝试通过 SSH 连接到服务器时出现 SSH Permission denied 错误:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
在 Permission denied 语句之后,括号包含在连接启动时失败的尝试身份验证方法。该错误表明公钥是问题所在,这是一种误导。
错误的原因之一可能是sshd_config
包含 SSH 服务器配置的文件。另一种可能是该authorized_keys
文件没有足够的权限。该文件包含允许通过 SSH 连接到服务器的客户端的公钥列表。因此,系统无法读取文件会导致权限被拒绝错误。
如何修复 SSH 权限被拒绝
这两种解决方案都包含您需要在服务器端执行的步骤。首先打开服务器上的终端,然后继续执行以下解决方案之一。
解决方案 1:启用密码验证
如果要使用密码访问 SSH 服务器,解决权限被拒绝错误的解决方案是在文件中启用密码登录sshd_config
。
为此,请在文本编辑器中打开该文件。此示例使用 nano 编辑器:
sudo nano /etc/ssh/sshd_config
在文件中,找到该PasswordAuthentication
行并确保它以yes
.
找到该ChallengeResponseAuthentication
选项并通过添加禁用它no
。
如果行被注释掉,请删除井号#
以取消注释。
保存文件并退出。
通过键入以下命令重新启动 SSH 服务:
sudo systemctl restart sshd
解决方案 2:更改文件系统权限
出于安全考虑,不建议使用基于密码的登录作为 SSH 身份验证方法。因此,以下解决方案可能更可取,因为它解决了公钥身份验证方法的问题。
sshd_config
首先,使用文本编辑器打开文件:
sudo nano /etc/ssh/sshd_config
在该文件中,确保以下选项设置如下:
PermitRootLogin no
PubkeyAuthentication yes
注意:以上步骤被认为是最佳安全实践。如果需要使用 root 登录,请将相关行设置为yes
.
通过在行首添加井号来注释掉与 GSSAPI 相关的选项:
#GSSAPIAuthentication yes
#GSSAPICleanupCredentials no
另外,确保该UsePAM
行设置为yes
:
UsePAM yes
保存文件并重启 sshd 服务:
systemctl restart sshd
现在导航到您的主文件夹并检查权限:
ls -ld
如果您的所有者权限未设置为读取、写入和执行 ( drwx------
),请使用chmod 命令更改它们:
chmod 0700 /home/[your-username]
现在转到该.ssh
文件夹并重新检查权限:
ls -ld
该目录还应具有文件所有者的读取、写入和执行权限。要强制执行它们,请chmod
再次使用:
chmod 0700 /home/your_home/.ssh
该.ssh
文件夹包含该authorized_keys
文件。检查其权限:
ls -ld authorized_keys
文件所有者应具有读写权限。要设置它们,请使用:
chmod 0600 /home/[username]/.ssh/authorized_keys
现在尝试再次使用密钥对登录。下面的输出显示成功的登录尝试。
结论
本教程涵盖了解决SSH 权限被拒绝 (publickey,gssapi-keyex,gssapi-with-mic)错误的必要步骤。通过完成指南中的步骤,您应该修复错误并成功通过 SSH 连接到您的服务器。