升级到 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
文件,这似乎是一个不太好想法,我建议
使用最近的工具创建一个新密钥。
然后复制新的公钥(到剪贴板)
日志最后一次使用旧密钥:
ssh -i .ssh/id_dsa.pub -o PubkeyAcceptedKeyTypes=+ssh-dss user@host
然后升级
@host
的authorized_keys
文件,通过添加新的公钥并注销cat >>.ssh/authorized_keys
paste,然后Ctrl+D
使用默认语法通过新密钥登录:
ssh user@host
然后升级
@host
的文件authorized_keys
,通过移除你老公钥(当我的旧公钥位于此文件sed -e 1d -i .ssh/authorized_keys
在线时我会使用它)。1
如果可以的话,我建议升级你的 ssh 服务器。
- 登出
测试旧密钥是否不再起作用。
ssh -i .ssh/id_dsa.pub -o PubkeyAcceptedKeyTypes=+ssh-dss user@host ... Permission denied...
这肯定不起作用;-)
您甚至可以重新检查一切是否正常:
ssh user@host uptime