博客 / Linux/ 彻底解决 SSH 免密登录报错:WARNING: UNPROTECTED PRIVATE KEY FILE!

彻底解决 SSH 免密登录报错:WARNING: UNPROTECTED PRIVATE KEY FILE!

彻底解决 SSH 免密登录报错:WARNING: UNPROTECTED PRIVATE KEY FILE!

问题描述

在通过 SSH 从一台服务器连接到另一台服务器时,出现以下错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/root/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/root/.ssh/id_rsa": bad permissions

错误信息明确指出,问题根源在于私钥文件(/root/.ssh/id_rsa)的权限设置过于开放,不符合 SSH 的安全要求。

原因分析

SSH 协议对私钥文件的权限有严格的安全限制。私钥文件(如 id_rsa)的权限必须设置为仅文件所有者可读写,其他任何用户(包括同组用户)都不能有访问权限。通常,正确的权限是 600(即 -rw-------)。

如果权限设置不当(例如 755644),SSH 客户端出于安全考虑会拒绝使用该私钥,从而导致连接失败。

解决方案

解决此问题的核心是修正私钥文件的权限。以下是详细步骤和最佳实践。

步骤一:修正私钥文件权限

发起连接的服务器(客户端)上,执行以下命令:

chmod 600 /root/.ssh/id_rsa

此命令将私钥文件的权限设置为仅 root 用户可读写。

步骤二:确保 .ssh 目录权限正确

除了私钥文件,.ssh 目录本身的权限也应正确设置。通常,.ssh 目录的权限应为 700drwx------)。

chmod 700 /root/.ssh

步骤三:使用 ssh-copy-id 安全复制公钥(推荐)

为了避免手动复制公钥可能带来的权限问题,建议使用 ssh-copy-id 命令。该命令会自动将公钥追加到目标服务器的 ~/.ssh/authorized_keys 文件中,并设置正确的文件权限。

基本命令格式如下:

ssh-copy-id -i /root/.ssh/id_rsa.pub -p [端口号] root@[目标服务器IP]

参数说明:

  • -i /root/.ssh/id_rsa.pub:指定要发送的公钥文件路径。
  • -p [端口号]:指定目标服务器的 SSH 端口。如果 SSH 服务运行在默认的 22 端口,可省略此参数。如果修改过端口,请务必指定。
  • root@[目标服务器IP]:目标服务器的用户名和 IP 地址。

示例: 假设目标服务器 IP 为 192.168.1.100,SSH 端口为 2222,则命令为:

ssh-copy-id -i /root/.ssh/id_rsa.pub -p 2222 root@192.168.1.100

执行后,根据提示输入目标服务器 root 用户的密码即可完成配置。

步骤四:验证双向免密登录(可选)

如果需要实现两台服务器之间的双向免密 SSH 登录,需要在另一台服务器上重复上述过程:

  1. 在目标服务器上生成 SSH 密钥对:ssh-keygen -t rsa(按提示操作,通常直接回车使用默认设置)。
  2. 使用 ssh-copy-id 命令将新生成的公钥复制回第一台服务器。
  3. 确保两台服务器上的私钥文件(id_rsa)权限均为 600.ssh 目录权限均为 700

补充说明与最佳实践

  • 权限检查: 配置完成后,可使用 ls -la /root/.ssh/ 命令检查权限是否正确。
  • 安全建议: 尽量避免直接使用 root 用户进行 SSH 密钥登录。建议为日常操作创建一个具有 sudo 权限的普通用户,并在该用户下配置 SSH 密钥对,以提升系统安全性。
  • 端口确认: 如果不确定目标服务器的 SSH 端口,可以在目标服务器上查看 SSH 配置文件:cat /etc/ssh/sshd_config | grep ^Port
  • 通用性: 本文所述方法适用于 Linux 及 macOS 系统。Windows 系统使用 OpenSSH 客户端时,权限管理逻辑类似,但文件路径和命令可能有所不同。

遵循以上步骤,即可彻底解决“WARNING: UNPROTECTED PRIVATE KEY FILE!”错误,并建立安全的 SSH 免密登录通道。

发表评论

您的邮箱不会公开。必填项已用 * 标注。