如何修复"SSH 失败,权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)"错误?

linuxoperating systemopen source

简介

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

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

这时 SSH 就派上用场了,它通过在传输过程中加密数据来提供额外的安全保障。使用 SSH,用户可以远程访问其服务器和设备,而无需担心数据泄露。

SSH 权限被拒绝错误概述

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

此错误消息表示用户没有访问目标设备所需的权限或身份验证凭据。导致此错误的原因有很多,例如 publickey 权限被拒绝、gssapi-keyex 权限被拒绝或 gssapi-with-mic 权限被拒绝等错误。

了解 SSH 权限被拒绝错误

常见的 SSH 权限被拒绝错误

SSH(安全外壳)是与远程服务器进行安全通信的重要工具。然而,它有时会出现一些错误,让用户感到沮丧。

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

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

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

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

"gssapi-with-mic"错误通常出现在客户端和服务器使用基于 Kerberos 的加密进行相互识别时出现问题。如果您未正确设置 Kerberos 配置或您的设置存在兼容性问题,通常就会出现此问题。

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

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

公钥错误故障排除分步指南

如果您在尝试连接 SSH 服务器时收到"权限被拒绝 (公钥)"错误消息,您可以采取以下几个步骤来解决问题。首先,检查 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 连接时收到"Permission Denied (gssapi-keyex)"或"Permission Denied (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 错误,以及针对长期存在的问题的高级修复方法。


相关文章


有用资源