它确保通过不安全网络进行通信期间的数据机密性和完整性。但是,当尝试使用 SSH 连接到远程服务器时,您可能会遇到可怕的“SSH 权限被拒绝(公钥)”错误。此错误表示服务器拒绝访问,因为提供的公钥与任何可用的授权密钥都不匹配。
了解“SSH 权限被拒绝(公钥)”错误
在深入研究故障排除过程之前,让我们更深入地了解错误的重要性和潜在原因。
错误消息的说明
“SSH 权限被拒绝(公钥)”错误消息可能因您使用的 SSH 客户端而略有不同,但通常如下所示:
Permission denied (publickey).
错误的潜在原因
- 远程服务器上的公钥不正确 远程服务器将 SSH 客户端提供的公钥与用户目录中的authorized_keys文件进行比较。如果公钥与此文件中的任何条目都不匹配,服务器将拒绝访问。
~/.ssh
- 本地计算机上的私钥不正确 在客户端,SSH 客户端使用与发送到服务器的公钥关联的私钥进行身份验证。如果私钥与公钥不匹配,身份验证将失败,从而导致“权限被拒绝”错误。
- SSH 密钥文件的文件权限问题 本地计算机的 SSH 密钥文件上的文件权限不正确可能会导致访问被拒绝。私钥(通常id_rsa)和目录都应该具有严格的权限,以防止未经授权的访问。
~/.ssh
- 服务器配置问题 SSH 服务器设置(尤其是在sshd_config文件中)的错误配置可能会导致身份验证失败,从而导致“权限被拒绝”错误。
解决错误的故障排除步骤
现在我们已经清楚地了解了错误的潜在原因,让我们深入研究分步故障排除过程,以修复“SSH 权限被拒绝(公钥)”问题。
步骤 1:验证正确的 SSH 密钥对
第一步是确保在本地计算机上具有正确的 SSH 密钥对。请按照以下步骤操作:
检查 SSH 密钥对是否存在:打开终端并输入以下命令:
ls ~/.ssh
生成新的 SSH 密钥对(如有必要):
如果缺少 SSH 密钥对,或者您希望生成新的密钥对,请使用以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
此命令生成密钥长度为 4096 位的新 RSA 密钥对。提供的电子邮件地址将作为注释添加到公钥中,以便进行识别。
步骤 2:验证 SSH 代理
SSH 代理负责安全地存储私钥并提供它们进行身份验证。若要检查 SSH 代理是否正在运行并将私钥添加到其中,请执行以下步骤:
- 检查 SSH 代理是否正在运行:
eval "$(ssh-agent -s)"
如果代理已在运行,则此命令将输出其 PID。如果没有,它将启动 SSH 代理。
- 将私钥添加到 SSH 代理:
使用以下命令将私钥添加到 SSH 代理:
$ ssh-add ~/.ssh/id_rsa
如果您在密钥生成期间设置了密码,则需要立即输入。
步骤 3:更正文件权限
文件权限在 SSH 密钥安全中起着至关重要的作用。若要为 SSH 目录和私钥文件设置适当的权限,请执行以下步骤:
- 为 SSH 目录设置适当的权限:
chmod 700 ~/.ssh
此命令将目录的权限设置为仅由所有者(您)访问,并拒绝其他任何人的访问。
- 为私钥文件设置适当的权限:
chmod 600 ~/.ssh/id_rsa
此命令将私钥的读取和写入权限限制为仅所有者。
步骤 4:更新服务器上的授权密钥
为了确保身份验证成功,必须将公钥添加到远程服务器上的authorized_keys文件中。请按照以下步骤操作:
- 将公钥复制到远程服务器:
ssh-copy-id user@remote_server
- 确保authorized_keys文件的权限正确:
ssh user@remote_server "chmod 600 ~/.ssh/authorized_keys"
步骤 5:检查服务器上的 SSH 配置
如果问题仍然存在,则远程服务器上可能存在配置问题。请按照以下步骤验证和修改 SSH 服务器配置:
- 验证sshd_config文件中的 SSH 设置:
sudo nano /etc/ssh/sshd_config
查找以下设置:
PubkeyAuthentication yes PasswordAuthentication yes
确保“PubkeyAuthentication”设置为“yes”,并将“PasswordAuthentication”设置为“no”或“noout-password”,以获得最大的安全性。
- 重新启动远程服务器上的 SSH 服务:
sudo systmctl restart sshd
其他提示和最佳做法
除了故障排除步骤之外,请考虑实施以下提示和最佳实践来维护安全的 SSH 环境:
- A. 定期备份 SSH 密钥对
定期备份 SSH 密钥对至关重要。这种做法可确保在密钥丢失或泄露时可以还原密钥。
- B. 避免共享私钥
切勿与他人共享您的私钥,因为这会损害您的 SSH 连接的安全性。每个用户都应该有其唯一的密钥对进行身份验证。
- C. 使用密码短语以增加安全性
向 SSH 密钥添加密码短语可提供额外的安全层。它充当您的私钥的密码,使未经授权的用户更难获得访问权限。
- D. 监视 SSH 日志中的可疑活动
监控服务器的 SSH 日志,以查找任何可疑登录尝试的迹象。检测和调查异常活动可以帮助您主动保护系统免受潜在威胁。
总之,“SSH 权限被拒绝(公钥)”错误可能令人沮丧,但清楚地了解其原因和正确的故障排除步骤,您可以轻松解决它。按照本指南中的详细说明进行操作,您可以放心地排除故障并解决问题,确保安全可靠地远程访问您的服务器。
请记住始终验证您的 SSH 密钥对,确保您的私钥安全,并保持适当的文件权限,以增强 SSH 连接的安全性。通过遵循最佳实践并监控 SSH 日志,您可以进一步增强服务器的安全性并阻止潜在的未经授权的访问尝试。