SSH DSA 密钥不再适用于无密码身份验证

D.W*_*.W. 26 linux fedora ssh openssh

升级到 Fedora 23 后,无密码(基于公钥)身份验证在 SSH 中不再有效:当尝试通过 SSH 连接到某个主机时,它会提示我在远程主机上输入密码。我无法让它使用我的 SSH 私钥。Fedora 22 一切正常。

我的公钥是 DSA 密钥 ( ~/.ssh/id_dsa.pub)。我正在使用 OpenSSH 7.1 ( openssh-7.1p1-5.fc23.x86_64)。

如何让无密码身份验证再次正常工作?

D.W*_*.W. 43

这是升级到 OpenSSH 7.0 的结果。正如OpenSSH 7.0发行说明所说,“默认情况下在运行时禁用对 ssh-dss 主机和用户密钥的支持”。

解决方案是~/.ssh/config在每台客户端机器(运行 SSH 客户端的每台机器)上添加以下行:

PubkeyAcceptedKeyTypes=+ssh-dss
Run Code Online (Sandbox Code Playgroud)

如果服务器使用 OpenSSH 7.0 或更新版本,您需要/etc/ssh/sshd_config在每台服务器机器上添加这一行。

或者,您可以生成一个全新的 SSH 密钥并将其添加到您想要登录的每台服务器上的 authorized_keys 文件中。 我建议您使用 RSA,以避免兼容性问题。我不推荐 ECDSA,因为显然gnome-keyring-daemon 不会自动获取ECDSA 类型的 SSH 密钥。


编者按:为什么 OpenSSH 的人禁用了 DSA 密钥?我不知道。据我所知,DSA 密钥 (ssh-dss) 的安全性没有问题。在OpenSSH的网页声称,SSH-DSS较弱,但据我所知,1024位SSH-DSS是不超过1024位RSA弱,和1024位RSA密钥未禁用。

  • 密钥类型选择在 [Security](http://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys) 上讨论了一段时间。如果您没有好的随机生成器(您无法确定),DSA 密钥的安全性从一开始就存在问题,并且不那么安全。由于现在还有其他可能的密钥类型可供使用,因此没有理由保留有问题的密钥类型。 (2认同)
  • @Jakuje,是的,在信息安全 [here](http://security.stackexchange.com/q/23383/971) 和 [here](http://security.stackexchange.com/q/) 上讨论了密钥类型选择5096/971)。在写我的社论评论之前,我阅读了所有这些,我仍然不明白为什么 DSA 密钥被禁用:它们并不比相同长度的 RSA 密钥弱,而后者没有被禁用。这些线程中没有任何内容表明 DSA 是“有问题的”,正如 Thomas Pornin 所说,“假设密钥足够大,没有安全相关的理由偏爱一种类型而不是其他类型”。(续) (2认同)