在 OpenBSD 上禁用某些 OpenSSH 密钥:为什么相应的“sshd_config”条目被忽略以及为什么“ssh-keygen -A”会生成禁止的密钥?

在 OpenBSD 上禁用某些 OpenSSH 密钥:为什么相应的“sshd_config”条目被忽略以及为什么“ssh-keygen -A”会生成禁止的密钥?

我正在尝试在我的 OpenBSD 6.9 服务器上实现以下功能:

  1. 禁止使用除ssh-ed25519两个按键之外的所有按键服务器客户側面。
  2. 仅限ssh-keygen -A于通过授权ssh-ed25519算法生成密钥,没有其他方法。

为了实现这些目标,我在我的中添加了以下几行sshd_config

HostKey /etc/ssh/ssh_host_ed25519_key
CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

我还在我的中添加了以下几行ssh_config

CASignatureAlgorithms ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
HostKeyAlgorithms ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519

我已删除除授权密钥之外的所有密钥。

重新启动sshd:

# rcctl restart sshd                                                                            
sshd(ok)
sshd(ok)

通过运行以下命令验证我的设置是否被利用:

# ssh -Q HostbasedAcceptedAlgorithms
# ssh -Q HostKeyAlgorithms
# ssh -Q PubkeyAcceptedAlgorithms

令我惊讶的是,他们都得到了以下信息:

ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

换句话说,关键的限制被忽略了。

为了安全起见,我甚至重新启动了服务器,但没有任何区别。

一种可能的解决方法是删除所有密钥文件,只保留授权的密钥文件。但是,init 脚本中/etc/rc有一行,ssh-keygen -A它会在每次系统重启后,在 sshd 守护进程启动之前重新生成所有丢失的 ssh 密钥,包括禁用算法

因此,移除钥匙并不能解决问题。

作为额外的解决方法,我可以ssh-keygen -A从 init 脚本中删除该行或将其替换为我的自定义密钥生成算法,但这将导致一切回到原点:不得不一遍又一遍地处理这个问题,例如每次系统更新后,每当 OpenBSD 团队发布新版本时/etc/rc。自动删除该行并在大量服务器上测试这种草率的解决方法很困难,如果出现问题,可能会导致大规模网络故障。

因此,我继续调查,并深入研究了 的源代码ssh-keygen。我发现无法-A从外部(例如通过配置文件)限制交换机的行为。它甚至不执行初步测试以确定密钥是否被授权,它只是根据硬编码数组中的算法列表生成密钥。避免这种情况的唯一方法是编辑、重新编译并使用 的自定义分支ssh-keygen,但每次更新 OpenSSH 后我都必须处理它……

我已经找到了针对其他操作系统的部分解决方案,但没有找到针对 OpenBSD 的解决方案。

有人能给我指出一个合适的解决方案吗?为什么我的sshd_configssh_config密钥限制被忽略以及如何停止ssh-keygen -A使用禁用算法生成密钥?

在有人问之前:OpenSSH 在两个配置文件中都使用了所有其他设置,因此这些配置文件确实是实际加载的文件。

非常感谢所有有用的答案。

相关内容