我正在租用一台运行 CentOS Stream 8 的 VPS,我为用户“foo”设置了 SSH 公钥身份验证。我通过 Windows 上的 PuTTY 访问它。
最近我租用了另一台运行 Rocky Linux 9 的 VPS,并以相同的方式设置了 sshd,然后将文件/home/foo/.ssh/authorized_keys
从旧 VPS 复制到新 VPS。这样,我只需克隆 PuTTY 配置文件配置,仅将 IP 地址从旧地址更改为新地址,并重复使用 PuTTY 的 PPK 密钥。
但是,当我通过 PuTTY SSH 连接到新服务器时,出现错误:
Using username "foo".
Authenticating with public key "[email protected]"
Server refused public-key signature despite accepting key!
Using keyboard-interactive authentication.
Password:
我必须输入“foo”用户的密码。但是,我想放弃旧服务器中基于密码的身份验证。
两端的私钥和公钥相同。SELinux 不会干扰这里。~/.ssh
和的权限~/.ssh/authorized_keys
正确。
请注意,通过公钥从新服务器 SSH 连接到其自身可以完美运行。显然,在这种情况下它使用的是id_rsa
,而不是 PuTTY 的 PPK 密钥。
dmesg
并且/var/log/messages
没有显示任何有用的内容。
可能是什么问题呢?
注意:这不是服务器拒绝公钥签名尽管接受密钥-putty的重复,因为没有一个答案适用。
你的PuTTY版本是最新的吗?
目前,SSH 协议正在更改为使用更新、更强大的哈希/签名算法和现有的 RSA 密钥。
ssh -Q key-sig
将它们显示为rsa-sha2-256
和rsa-sha2-512
以替换旧的ssh-rsa
。RHEL / Rocky 9.x 中的 sshd 版本将默认要求使用这些更强大的哈希算法。密钥本身没有问题,无需替换它们。所讨论的哈希值不嵌入密钥材料中,而是在连接协商期间计算的,因此可以在不替换密钥的情况下更改哈希算法。
也可以允许使用旧的哈希算法,但更安全的选择是将 PuTTY 升级到最新版本,在撰写本文时为 0.81。
如果您想要/需要允许来自较旧的 SSH 客户端的传入连接,
rsa-sha2-*
这些客户端没有 RHEL/Rocky 9.x 可用的算法组合,并且不能让客户端切换到 ECDSA 密钥,则必须将加密策略设置为:一些消息来源还提出了替代方案:
它也能起作用,但不推荐用于此目的,因为它有点过度:它还允许其他几种弱加密方法。
参考: