Fedora 30 上使用 OpenSSH 8.0 的 SSH 连接问题(使用 ssh-dss),仍然要求输入公钥设置的密码

Zhi*_*ang 2 linux security fedora ssh openssh

我已经在网上做了一些研究,最好的解决方案似乎是使用更好的算法来生成新的密钥对。但现在我仍然需要使用 ssh-dss 密钥对进行内部自动化。

(我知道从openssh 7.0开始,ssh-dss默认是禁用的,我们需要显式添加PubkeyAcceptedKeyTypes +ssh-dss到ssh配置中才能重新启用它。)

环境:

OpenSSH_8.0p1, OpenSSL 1.1.1c FIPS  28 May 2019

Linux hostname 5.1.19-300.fc30.x86_64 #1 SMP Mon Jul 22 16:32:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所做的事情的清单:

  • 创建一个有密码的用户(有些帖子说可能需要密码)
  • 创建.ssh文件夹,在 中设置公钥.ssh/authorized_keys,确保它们具有 700、600 权限和正确的所有者而不是 root。
  • 检查/etc/ssh/sshd_config,确保我们有PubkeyAuthentication yes(通常是默认值)
  • 显式启用ssh-dss
    • 在服务器PubkeyAcceptedKeyTypes +ssh-dss上添加/etc/ssh/sshd_config
    • PubkeyAcceptedKeyTypes +ssh-dss在服务器端~/.ssh/config和客户端都添加
  • 重新启动 sshd 服务以选择新的更改

但是,我仍然被要求输入密码。

  • 检查一下/var/log/secure,我看到:

userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes

  • 查看ssh -Q key
ssh-ed25519
ssh-ed25519-cert-v01@openssh.com
ssh-rsa
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
ssh-rsa-cert-v01@openssh.com
ssh-dss-cert-v01@openssh.com
ecdsa-sha2-nistp256-cert-v01@openssh.com
ecdsa-sha2-nistp384-cert-v01@openssh.com
ecdsa-sha2-nistp521-cert-v01@openssh.com
Run Code Online (Sandbox Code Playgroud)

看起来应该ssh-dss已经在列表中了,为什么当使用私钥文件进行 ssh 时我仍然看到该错误?

/var/log/secure将 ssh 日志级别设置为后,我没有得到更多信息VERBOSE

Jul 28 18:40:44 re-pkg-fedora30 sshd[1374]: Connection from 10.32.34.60 port 63863 on 10.140.143.132 port 22
Jul 28 18:40:44 re-pkg-fedora30 sshd[1374]: Failed publickey for mambop from 10.32.34.60 port 63863 ssh2: RSA SHA256:7EgHyu1SFM76cXlMGxHcvqg/C2xqbfbrQCfX5WCnOgc
Jul 28 18:40:44 re-pkg-fedora30 sshd[1374]: userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]
Jul 28 18:40:45 re-pkg-fedora30 sshd[1374]: Connection closed by authenticating user mambop 10.32.34.60 port 63863 [preauth]
Run Code Online (Sandbox Code Playgroud)

Ing*_*kat 6

我在 RHEL 8.0 上遇到了同样的问题,最初走了同样的路线,添加PubkeyAcceptedKeyTypes=+ssh-dss/etc/ssh/sshd_config,但它仍然不起作用。然后我意识到它/etc/ssh/ssh_host_dsa_key不存在,所以我创建了它,但仍然没有成功。

然后我找到了有关 RHEL 8 系统范围加密策略的文档,该文档一开始就解释了LEGACY策略级别允许 DSA 算法。事实上,使用 DSA 密钥进行 SSH pubkey 身份验证所需的全部工作(即使不重新启动sshd)是

$ update-crypto-policies --set LEGACY
Run Code Online (Sandbox Code Playgroud)

请注意,这也会削弱其他几个安全方面。我不在乎,因为无论如何,这是一个短暂的测试系统。