我在 AWS 中构建了一个新的 Ubuntu 服务器。现在由于某种原因,我在其他 Ubuntu 服务器上工作的私钥对她不起作用了。 auth.log 中的错误是
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
这只是 Putty 的问题,如果我尝试通过 Linux 工作站进行日志记录,任何机器都不会出现任何问题。
我看到的区别是新服务器是
Ubuntu 22.04.1 LTS 运行OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022
工作(旧)服务器是
Ubuntu 20.04.4 LTS(Focal Fossa)运行OpenSSH_8.2p1 Ubuntu-4ubuntu0.4, OpenSSL 1.1.1f 31 Mar 2020
此版本的 OpenSSH 有什么变化吗?如何让腻子再次工作?
答案1
一个简单的解决方案。
将这一行添加到/etc/ssh/sshd_config
.
PubkeyAcceptedAlgorithms +ssh-rsa
之后,重新启动sshd
服务以使新设置生效。
$ sudo systemctl restart sshd
答案2
SSH 协议中有多种类型的密钥和签名算法。密钥类型为 的 RSA 密钥ssh-rsa
可用于使用 SHA-1(在这种情况下,签名类型为ssh-rsa
)、SHA-256(签名类型为rsa-sha2-256
)或 SHA-512(签名类型为rsa-sha2-512
)进行签名。
您在这里看到的是,您正在使用 RSA 密钥进行连接,并使用ssh-rsa
带有 SHA-1 的签名类型。不幸的是,SHA-1 不再安全,服务器告诉您它不会接受该签名类型。这是正确的做法,因为它可以避免任何安全问题。
您可以通过几种不同的方式解决这个问题。首先,您可以简单地升级 PuTTY。最新版本支持 SHA-2 签名算法(SHA-256 和 SHA-512),因此应该可以正常工作。您还可以生成不同的 SSH 密钥,例如 Ed25519 密钥,Mozilla、GitHub 和其他信誉良好的各方认为这是最推荐的选项。请注意,PuTTY 将它们归类为 EdDSA 密钥,这是更通用的术语;您需要 255 或 256 位选项。
您还可以在服务器端进行调整PubkeyAcceptedKeyTypes
以/etc/ssh/sshd_config
包含(如果这样做,ssh-rsa
您还应该包含所有其他选项)。ssh -Q sig
但是,这意味着您使用的是不安全的 SHA-1 签名,因此您可能需要选择其他选项之一。
答案3
从评论来看,但不够明显,在与安全性进行权衡之前,最好检查其他简单方法是否有效。
在服务器端进行任何更改之前,请尝试将 putty 更新到最新版本。就我而言,0.78 版本解决了这个问题,没有对服务器端和密钥进行任何更改。
我找不到真正的原因Putty 更改日志文件。
答案4
补充来自@bk2204的回答(RSA 现在需要 SHA-2)和贾科莫·卡泰纳齐(升级PuTTY到0.78版本),解释可以在PuTTY 0.75版本的changelog中找到:
支持使用 SHA-2 而不是 SHA-1 的 RSA 密钥算法。
因此,0.75 版本之前的 PuTTY 尝试将 RSA 与 SHA-1 结合使用,这在较新的 OpenSSH 版本中默认禁用。