我已经在网上做了一些研究,最好的解决方案似乎是使用更好的算法来生成新的密钥对。但目前我仍然需要使用 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
以下是我目前已完成工作的清单:
- 创建一个带密码的用户(有些帖子说可能需要密码)
- 创建
.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
[email protected]
ssh-rsa
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
看起来它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]
答案1
我在 RHEL 8.0 中遇到了同样的问题,最初我采用了相同的方法,将 添加到PubkeyAcceptedKeyTypes=+ssh-dss
,/etc/ssh/sshd_config
但仍然不起作用。然后我意识到/etc/ssh/ssh_host_dsa_key
不存在,所以我创建了 ,但仍然没有成功。
然后我发现有关 RHEL 8 系统范围加密策略的文档,它一开始就解释了LEGACY
策略级别允许 DSA 算法。事实上,要使使用 DSA 密钥的 SSH 公钥身份验证正常工作(即使没有重新启动sshd
),只需要
$ update-crypto-policies --set LEGACY
请注意,这也会削弱其他几个安全方面。我不在乎,因为无论如何,这是一个短暂的测试系统。
答案2
我最近从 Fedora 28 升级到 Fedora 31,遇到了同样的问题。不知道为什么,但我遇到了完全相同的问题。它告诉我,在完成密钥后,密钥算法就在那里-Q
。有一次,我似乎已经克服了那个错误,但后来没有得到密钥交换算法,也不知道我需要什么 DSA。
最后我决定升级到 512 位 ECDSA,这对我来说似乎有效。我知道这对你没有帮助,因为你可能有成千上万的用户都在使用旧证书,但我要让你知道,你并不是唯一一个遇到这个问题的人。
尽管 OpenSSH 文档说你可以降级,但我现在想知道 OpenSSH 版本 8 是否真的如此。版本 7 肯定支持它,因为这是我在上次升级之后和升级到版本 31 之前所做的。