我们的漏洞扫描器标记了一些 Linux 设备存在 SSH 漏洞,原因是密钥大小太小,DSS 算法为 1024 位。这很可能与 DSA 密钥有关,因为只有 1024 位。我已重新生成了新的 RSA 密钥,密钥大小为 2048,authorized_keys 文件仅引用 RSA 密钥。
在 SSHD 配置下,我已取消注释并删除了引用 DSA 密钥的主机密钥条目。
但是,当我删除 RSA 密钥并重新启动 SSHD 服务时,DSA 会不断重新生成。
我显然在某个地方遗漏了一些东西,但不知道是什么。
答案1
您的设备一定很旧了,或者已经打过补丁了,因为自 2015 年 7.0 版以来,OpenSSH 上游已默认(但可逆)禁用了客户端和服务器上的 DSA 又名 ssh-dss。(从那时起,您可以在几个 Stacks 上找到很多关于此问题的问题,大多数是“哦,天哪!SSH 突然拒绝我的密钥/不起作用!发生了什么事?”)
此外,“标准”(上游) sshd_config 文件有几个 HostKey 条目,但全部注释掉#
,这意味着程序实际上使用其编译后的默认值(在 7.0 以下,默认值包括 DSA)。另一方面,如果你取消注释(使能够)最后一个HostKey 条目,但保留注释或者删除您不想要的那个(即DSA),它应该只使用已启用的那个。
如果这不管用,一个更笨拙的方法应该是创建一个空的 ssh_host_dsa_key
并使(same).pub
它们和目录不可写(在确保您想要的密钥有效之后),或者在支持它的文件系统上使文件不可变。
最后,一种可以让扫描器闭嘴而不会真正提高安全性的替代方法是生成并安装具有更大组(如 2048 位)的 DSA 密钥。OpenSSH 提供的ssh-keygen
程序无法做到这一点,但是OpenSSL 命令行可以,前提是您的设备上有此功能;如果没有,但您可以将数据传输到您的设备,您openssl dsaparam -genkey -noout 2048 >file
可以任何系统,然后将生成的文件传输到您的设备ssh_host_dsa_key
。无论哪种方式,然后执行ssh-keygen -yf ssh_host_dsa_key >ssh_host_dsa_key.pub
。在其他情况下,如果您想执行“现代”DSA(FIPS186-3 大小),您需要 2010 年或更高版本的 OpenSSL 1.0.0,但仅适用于 SSH,其中协议强制 SHA1,即使 OpenSSL 0.9.x 也足够好了。
OpenSSH 服务器上的 authorized_keys 文件定义了将被接受的密钥(和算法)客户身份验证。它与服务器密钥和身份验证。