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

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

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

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

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

答案1

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

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

PubkeyAcceptedKeyTypes=+ssh-dss

如果服务器使用的是 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 密钥并未被禁用。

答案2

我的看法

为了允许编辑.ssh/config文件,这似乎是一个不太好想法,我建议

  1. 使用最近的工具创建一个新密钥。

    然后复制新的公钥(到剪贴板)

  2. 日志最后一次使用旧密钥:

    ssh -i .ssh/id_dsa.pub -o PubkeyAcceptedKeyTypes=+ssh-dss user@host
    

    然后升级@hostauthorized_keys文件,通过添加新的公钥并注销

    cat >>.ssh/authorized_keys
    

    paste,然后Ctrl+D

  3. 使用默认语法通过新密钥登录:

    ssh user@host
    
    1. 然后升级@host的文件authorized_keys,通过移除你老公钥(当我的旧公钥位于此文件sed -e 1d -i .ssh/authorized_keys在线时我会使用它)。1

    2. 如果可以的话,我建议升级你的 ssh 服务器。

    3. 登出
  4. 测试旧密钥是否不再起作用。

    ssh -i .ssh/id_dsa.pub -o PubkeyAcceptedKeyTypes=+ssh-dss user@host
    ...
    Permission denied...
    

    这肯定不起作用;-)

  5. 您甚至可以重新检查一切是否正常:

    ssh user@host uptime
    

相关内容