sshd:“没有主机密钥 alg”已修复但仍然很困惑

squ*_*wav 8 configuration sshd

显然 Fedora 35 没有在 HostKeyAlgorithms 或 PubkeyAcceptedKeyTypes 中列出 ssh-rsa,因此尝试从旧的 CentOS 6 机器进行 ssh 会产生错误:

$ ssh as1s16.intra.corp.us
no hostkey alg
Run Code Online (Sandbox Code Playgroud)

所以我在 /etc/ssh/sshd_config 中的 Include 之后添加了选项:

Include /etc/ssh/sshd_config.d/*.conf

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
Run Code Online (Sandbox Code Playgroud)

但同样的错误。然后我像这样运行 sshd :

# /usr/sbin/sshd -ddd
...
debug3: /etc/ssh/sshd_config:20 setting HostKeyAlgorithms +ssh-rsa
debug3: /etc/ssh/sshd_config:21 setting PubkeyAcceptedKeyTypes +ssh-rsa
...
debug1: SELinux support disabled [preauth]
...
debug3: append_hostkey_type: ssh-rsa key not permitted by HostkeyAlgorithms [preauth]
debug1: list_hostkey_types: rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519 [preauth]
Run Code Online (Sandbox Code Playgroud)

但同样的错误。然后我删除了运行 sshd 的选项,如下所示:

# /usr/sbin/sshd -ddd -oHostKeyAlgorithms=ssh-rsa
Run Code Online (Sandbox Code Playgroud)

它起作用了。我能够从 CentOS 6 客户端成功 ssh 登录。

然后我将选项放在包含之前:

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa

# To modify the system-wide sshd configuration, create a  *.conf  file under
#  /etc/ssh/sshd_config.d/  which will be automatically included below
Include /etc/ssh/sshd_config.d/*.conf
Run Code Online (Sandbox Code Playgroud)

它起作用了。

为什么我需要将这些指令放在 Include 之前?难道他们不应该去覆盖默认值吗?

dav*_*085 0

尽管该措辞不是很清楚,但我怀疑该config.d/*目录允许为特定客户端/用户或传入接口/端口使用单独的配置文件,而不是“系统范围”。这类似于sites/*apache/httpd 和 nginx(可能还有更多)中目录的使用,允许单独配置每个虚拟主机或应用程序,但仍然由一台服务器支持。查看这些文件,看看它们是否包含匹配行(后面应该跟其他实际行=不匹配、注释或空白),这意味着它们仅适用于某些连接,而不适用于所有连接。

包含的是文本。如果你有一个文件

blich
Include file*
blech
Run Code Online (Sandbox Code Playgroud)

其中 blich 和 blech 不包含Match行,但至少有一些文件包含 Match 行,然后 blech 有效地成为文件串联中最后一个 Match 块的一部分 - 因此 blech 中的设置仅用于传入连接满足这些匹配条件,而您的测试连接显然没有。

如果您希望 SSHD 设置为“全局”,则必须将它们放在任何匹配行之前,并且如果包含的文件包含匹配行,则意味着您必须将全局设置放在之前包括。

配置文件中的所有(使用的)设置都会覆盖程序中的默认设置。在配置文件中多次放置相同的设置(在任何 Match 块之前/之外)使用第一个而不是最后一个,因此您的想法是覆盖早期的“默认值”(如果它位于文件)不起作用。仅当后面出现的匹配块中的条件满足时,它才会覆盖第一个匹配块。

PS:这可能是现在发生的,因为 Fedora 是最前沿的,而OpenSSH在警告(威胁?)他们将从一年半前的 8.2 开始这样做后,最近终于改变了这一点。