如何修复“SSH 权限被拒绝 (publickey, gssapi-keyex, gssapi-with-mic)”?


介绍

安全外壳协议 (SSH) 是一种网络协议,允许在两台远程计算机之间进行安全通信。它广泛用于系统管理、文件传输和其他安全网络服务。

SSH 通过加密传输数据,在不安全的网络上提供安全通道,这使得任何人几乎不可能拦截或修改数据。在当今网络攻击频发的数字时代,尤其是在公共 Wi-Fi 等不安全网络上,保护敏感信息免遭未授权访问至关重要。

这就是 SSH 发挥作用的地方,因为它通过在传输过程中加密数据来提供额外的安全层。使用 SSH,用户可以远程访问他们的服务器和设备,而无需担心他们的数据被泄露。

SSH 权限被拒绝错误概述

虽然 SSH 为远程连接提供了强大的安全协议,但在尝试使用此协议在两台计算机之间建立连接时,可能会发生错误。“权限被拒绝”错误消息是最常见的错误之一。

此错误消息表明用户没有必要的权限或身份验证凭据来访问目标设备。此错误可能由于多种原因而发生,并具有不同的变体,例如 publickey 权限被拒绝、gssapi-keyex 权限被拒绝或 gssapi-with-mic 权限被拒绝错误。

理解 SSH 权限被拒绝错误

常见的 SSH 权限被拒绝错误

SSH(安全外壳)是在与远程服务器进行安全通信时必不可少的工具。但是,它有时会显示一些可能导致用户沮丧的错误。

SSH 抛出的最常见错误类型之一是“权限被拒绝”错误。此错误最常见的三个变体是“publickey”、“gssapi-keyex”和“gssapi-with-mic”。

每种错误类型的成因及其对 SSH 访问的影响

当使用身份验证方法(特别是公钥身份验证)但无法验证客户端的真实性时,就会发生“publickey”错误。公钥身份验证要求客户端和服务器都具有公钥和私钥对。

如果它们不匹配,您可能会收到此类错误消息。另一方面,“gssapi-keyex”错误发生在用户尝试使用 GSSAPI 身份验证但由于与本地 Kerberos 设置或服务器端 GSSAPI 配置方式不兼容而失败时。

“gssapi-with-mic”错误通常在使用基于 Kerberos 的加密的客户端和服务器之间的相互身份验证出现问题时出现。如果您没有正确设置 Kerberos 配置,或者您的设置存在兼容性问题,通常会出现此问题。

这些错误会给依赖 SSH 进行远程访问或文件传输功能的用户带来重大问题。了解每个错误的含义及其根本原因将有助于用户在工作流程中遇到这些错误时更有效地进行故障排除。

SSH 权限被拒绝错误的故障排除

逐步指导以排除 publickey 错误

如果您在尝试连接到 SSH 服务器时收到“权限被拒绝 (publickey)”错误消息,您可以采取以下几个步骤来排除此问题。首先,检查 SSH 密钥文件的权限和所有权。私钥文件应具有 600 权限,并且归尝试连接的用户所有。

公钥文件应具有 644 权限,并且归同一用户或 root 所有。接下来,确保您的公钥已正确配置在您尝试连接到的服务器上的 authorized_keys 文件中。

您可以通过将本地 ~/.ssh/id_rsa.pub 文件的内容复制到远程 ~/.ssh/authorized_keys 文件的新一行来实现此目的。如果这两个步骤都不能解决问题,请尝试生成新的 SSH 密钥对并将其添加到您的 authorized_keys 文件中。

为此,请在本地终端窗口中运行“ssh-keygen”,然后按照提示操作。然后将您的新公钥(位于 ~/.ssh/id_rsa.pub 中)复制到远程 authorized_keys 文件的新一行中。

逐步指导以排除 gssapi-keyex 和 gssapi-with-mic 错误

如果您在尝试进行 SSH 连接时收到“权限被拒绝 (gssapi-keyex)”或“权限被拒绝 (gssapi-with-mic)”错误消息,则 Kerberos 身份验证可能存在问题。要排除这些错误,首先检查 Kerberos 身份验证是否在客户端和服务器端都已正确配置。通过在每台机器上运行“krb5-config”命令来检查两台机器是否具有相似的 Kerberos 配置。

如果 Kerberos 配置看起来一切正常,但您仍然无法使用这些方法通过 SSH 连接,则可能需要禁用 GSSAPI 身份验证。这可以通过将以下行添加到您的 /etc/ssh/ssh_config 或 ~/.ssh/config 文件中来完成:“GSSAPIAuthentication no”。

这将强制 SSH 使用其他身份验证方法,例如公钥或基于密码的身份验证。通过遵循这些步骤并排除 SSH 中常见的权限被拒绝错误,您可以确保与远程服务器安全可靠的通信。

持久性问题的解决方法

使用 ssh-agent 管理密钥

SSH-agent 是一种允许您安全管理 SSH 密钥的程序。它作为后台进程运行,并将您的私钥密码存储在内存中。使用 ssh-agent 的优点是您只需在每个会话中输入一次密码,而不是每次连接到远程服务器时都输入。

要使用 ssh-agent,首先通过在终端中运行以下命令启动代理进程:

eval "$(ssh-agent -s)" 

接下来,通过运行以下命令将您的私钥添加到代理:

ssh-add ~/.ssh/id_rsa 

如果您的私钥具有不同的名称或路径,请相应地修改命令。添加后,您可以通过运行 `ssh-add -l` 来验证密钥是否已加载到代理中。

配置 sshd_config 文件以提高安全性

`sshd_config` 文件是 OpenSSH 守护程序的主要配置文件。通过修改此文件,您可以更改与 SSH 服务器行为和安全性相关的各种选项。

以下是一些可以提高 SSH 安全性的建议更改:

  • 更改默认端口 − 通过更改 SSH 使用的默认端口 (22),攻击者更难以找到并攻击您的服务器。

    但是,这不应被视为唯一的保护手段。

  • 禁用 root 登录 − 通常认为通过 SSH 禁用 root 登录是一种良好的实践。

    这可以防止攻击者对常见的用户名/密码组合使用暴力破解攻击。

  • 启用双因素身份验证 − 双因素身份验证 (2FA) 在用户名/密码身份验证之上添加了额外的安全层。

    这要求用户同时输入他们的密码和由单独设备(例如他们的智能手机)生成的附加代码。

  • 使用防火墙规则限制访问 − 除了配置 `sshd_config` 之外,最好使用防火墙规则来限制对 SSH 服务器的访问,这些规则只允许来自受信任 IP 地址的连接。

通过实施这些安全措施,您可以显著降低通过 SSH 进行未授权访问的风险。但是,必须记住,没有任何安全措施是万无一失的,需要定期监控和更新才能维护安全的系统。

结论

在当今网络威胁和攻击猖獗的世界中,确保通信渠道安全至关重要。SSH 通过加密数据和验证身份来确保系统之间的安全通信。它提供了一层额外的保护,防止未经授权的访问和窃听。

任何重视安全的组织都应确保只有授权人员才能访问 SSH。但是,即使是最好的安全措施有时也会失败,导致 SSH 权限被拒绝错误。

好消息是,这些错误可以通过故障排除步骤和高级修复轻松解决。以上各节提供了一个逐步指南,用于排除 publickey、gssapi-keyex 和 gssapi-with-mic 错误,以及持久性问题的解决方法。

更新于:2023年6月5日

17K+ 次查看

开启您的职业生涯

完成课程获得认证

立即开始
广告