如何从 systemd 单元文件中删除(不覆盖,不创建新的)选项?

如何从 systemd 单元文件中删除(不覆盖,不创建新的)选项?

如何从标准(系统)systemd 单元文件中删除行?详细信息如下:

ls -la /etc/ssh/ssh_host_*key*

这表明我有未使用和不需要的主机密钥类型。它们没有在 my 中配置sshd_config,但我希望它们根本不存在。如果我删除它们,它们会自动重新生成。

据我观察,/usr/lib/systemd/system/sshd.service包括:

Wants=sshdgenkeys.service

其内容如下所示,cat /usr/lib/systemd/system/sshdgenkeys.service:

[Unit]
Description=SSH Key Generation
ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key.pub

[Service]
ExecStart=/usr/bin/ssh-keygen -A
Type=oneshot
RemainAfterExit=yes

我知道我可以使用 覆盖或创建单元文件设置systemctl edit,但是像这样的线是如何ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key删除的?

我想要的最终结果与此类似:

[Unit]
Description=SSH Key Generation
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key.pub

[Service]
ExecStart=/usr/bin/ssh-keygen -t rsa|ed25519 -a 32
Type=oneshot
RemainAfterExit=yes

我不确定该命令对于 ssh-keygen 是否正确,但这是总体思路。我只想生成两种主机密钥类型,而不是全部。

答案1

在 systemd 单元中,列表通常可以通过分配空值来重置。这也适用于条件

如果为这些选项中的任何一个指定空字符串,则条件列表将完全重置,所有先前的条件设置(任何类型)将无效。

在您的覆盖中,使用以下内容:

ConditionPathExists=
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key
ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key.pub
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key
ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key.pub

相关内容