OpenSSH 8.8 版本升级后 RSA 密钥报错 permission denied 如何解决?

文章导读
升级 OpenSSH 到 8.8 版本后出现 RSA 密钥拒绝连接,最稳妥的处理方式是生成新的 Ed25519 密钥对替换旧的 RSA 密钥,临时应急则需要在客户端或服务端配置中显式启用 ssh-rsa 算法。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

升级 OpenSSH 到 8.8 版本后出现 RSA 密钥拒绝连接,最稳妥的处理方式是生成新的 Ed25519 密钥对替换旧的 RSA 密钥,临时应急则需要在客户端或服务端配置中显式启用 ssh-rsa 算法。

先说结论:这是 OpenSSH 安全策略变更导致的兼容性问题,建议优先更换密钥算法而非强行开启旧算法。

  • 先确认:检查 SSH 版本及报错详情
  • 先处理:生成新密钥或修改算法配置
  • 再验证:通过 verbose 模式确认握手成功

命令速用版

如果你需要立刻恢复连接,可以在客户端命令中临时指定算法,或者生成新密钥。

OpenSSH 8.8 版本升级后 RSA 密钥报错 permission denied 如何解决?
# 生成新的 Ed25519 密钥(推荐)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 临时使用旧 RSA 算法连接(仅应急)
ssh -o HostkeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@host

为什么会这样

OpenSSH 在 8.8 版本中默认禁用了 ssh-rsa 公钥签名算法。这并不是禁止使用 RSA 密钥文件本身,而是不再信任使用 SHA-1 哈希算法进行的签名操作。由于 SHA-1 已被证明存在碰撞风险,社区决定逐步淘汰该算法。如果你的客户端或服务端升级到了 8.8 或更高版本,而另一方仍尝试使用旧的 ssh-rsa 签名方式,握手就会失败,表现为权限拒绝。

分步处理

根据你是否能接受更换密钥,分为两种处理路径。

OpenSSH 8.8 版本升级后 RSA 密钥报错 permission denied 如何解决?

方案一:更换为更安全的密钥(推荐)

  1. 在本地生成新密钥:
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
  2. 将公钥上传到服务器:
    ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
  3. 如果无法自动上传,手动将 id_ed25519.pub 内容追加到服务器的 ~/.ssh/authorized_keys 文件中。
  4. 测试连接:
    ssh -i ~/.ssh/id_ed25519 user@host

方案二:临时兼容旧算法(仅限内网或过渡期)

  1. 编辑客户端配置文件 ~/.ssh/config,添加:
  2. Host *
        PubkeyAcceptedAlgorithms +ssh-rsa
        HostkeyAlgorithms +ssh-rsa
  3. 或者编辑服务端的 /etc/ssh/sshd_config,添加:
  4. PubkeyAcceptedAlgorithms +ssh-rsa
    HostkeyAlgorithms +ssh-rsa
  5. 重启服务端 SSH 服务:
    sudo systemctl restart sshd

怎么验证是否生效

使用详细模式连接,观察握手过程中的算法协商信息。

ssh -v user@host

在输出日志中,查找 Offering public keyServer accepts key 相关行。如果看到 ssh-ed25519rsa-sha2-... 且最终显示 Authentication succeeded,说明配置生效。如果依然看到 Permission denied (publickey) 且日志提示算法不匹配,则需检查配置文件是否加载正确。

常见坑

  • 不要把自己锁在外面:修改服务端配置前,务必保持当前会话不断开,新开一个终端测试成功后再关闭旧会话。
  • 配置文件权限:SSH 对配置文件和密钥文件权限非常敏感,~/.ssh 目录应为 700,密钥文件应为 600,否则可能报错。
  • 客户端与服务端区别:有时候是客户端升级了,有时候是服务端升级了,两边都需要检查是否支持对应的算法。
  • RSA 密钥并非完全不可用:8.8 版本禁用的是 ssh-rsa 签名算法,使用 rsa-sha2-256 或 rsa-sha2-512 签名的 RSA 密钥仍然可以使用,但生成新密钥类型更省心。

参考来源

  • OpenSSH, OpenSSH 8.8 Release Notes, https://www.openssh.com/releasenotes.html