从 Ubuntu 18.04 升级到 Ubuntu 22.04 后,无密码 SSH 不起作用。客户端是 Ubuntu 22.04,服务器是 Ubuntu 14.04。使用 Ubuntu 18.04 作为客户端可以正常工作。
我已经按照正确的步骤生成 .ssh 中的密钥并将其复制到服务器,但在 Ubuntu 22.04 中它不起作用
我一直执行并且一直努力的步骤总结:
ssh-keygen -t rsa
cat .ssh/id_rsa.pub | ssh -p 1331 user@server 'cat >> .ssh/authorized_keys'
这是 Seahorse 的问题吗?在 Ubuntu 22.04 的 Seahorse 中,我找不到“此密钥的所有者有权连接到此计算机”选项,如果是在 18.04 中。我不知道这是否与此有关
这有发生在其他人身上吗?
答案1
RSA SHA-1 哈希算法正在迅速被弃用。有一种解决方法可以重新启用 RSA,网址为SSH-RSA 密钥被拒绝,并显示“无相互签名算法”消息。
为了彻底解决此问题,我们的团队建议使用受支持且更安全的算法(例如 ECDSA 和 ED25519)重新生成这些已弃用的 SSH 密钥。使用 ECDSA 或 ED25519 算法生成的 SSH 密钥不受 RSA 弃用的影响。
/etc/ssh/ssh_config
在客户端添加以下行:
PubkeyAcceptedKeyTypes +ssh-rsa
答案2
更新:我建议尝试下面的命令行来查看所建议的配置更改是否真正起作用,这样,只有在您已经检查过它们是否起作用的情况下,才会进行配置更改。
总结-如果您在连接机器(例如)时遇到此问题,请将这些行添加到 ssh 配置文件(个人配置文件通常在.ssh/config
或系统范围配置文件中) ,/etc/ssh/ssh_config
alice.example.com
bob.example.org
Host alice.example.com bob.example.org
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
或者更详细地讲:
Ubuntu 和 Linux 上的 SSH 通常指的是 OpenSSH,但 OpenSSH 现已弃用(并且禁用默认情况下,RSA SHA-1 算法。它仍然可用,但必须为需要它的主机启用,请参阅他们的解释者,
当 SSH 客户端连接到服务器时,双方都会向对方提供连接参数列表...为了成功连接,每个参数必须至少有一个相互支持的选择。
为了能够连接到存在此问题的主机,需要上述一个或两个选项(建议升级主机,以便它们不再需要使用这种现在被认为不安全的算法)。在某些情况下,您可能需要为所有主机启用这些选项(Host *
)。
当您尝试连接到计算机时,如果看到此错误消息,
Unable to negotiate with ... port 22: no matching host key type found. Their offer: ssh-rsa
可以修复HostkeyAlgorithms +ssh-rsa
当您尝试连接到计算机时,如果看到此错误消息,
[email protected]: Permission denied (publickey).
可以修复PubkeyAcceptedAlgorithms +ssh-rsa
把它们放在一起会得到这样的一个节(在本例中是针对 2 台机器的),
Host alice.example.com bob.example.org
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
您需要将该节添加到个人 .ssh 配置文件中(如果不存在则创建它),通常位于.ssh/config
您的主目录下,或者如果您希望机器上的任何用户都拥有这些设置,请将该节添加到/etc/ssh/ssh_config
。
如果你不想进行任何配置更改,则可以在命令行上指定选项,
ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa some.hostname
最后要注意的是,PubkeyAcceptedAlgorithms
关键字取代了PubkeyAcceptedKeyTypes
一些答案中提到的关键字(参见变更日志)
答案3
/etc/ssh/ssh_config
如果您想要为所有用户添加此配置,或者~/.ssh/config
想要将其添加到您自己的用户,则可以添加以下行。
主机密钥算法 +ssh-rsa
答案4
做这个:
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/(your key filename)
然后测试:
$ ssh -T [email protected]
已经好了。