![如何从 systemd 单元文件中删除(不覆盖,不创建新的)选项?](https://linux22.com/image/169095/%E5%A6%82%E4%BD%95%E4%BB%8E%20systemd%20%E5%8D%95%E5%85%83%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4%EF%BC%88%E4%B8%8D%E8%A6%86%E7%9B%96%EF%BC%8C%E4%B8%8D%E5%88%9B%E5%BB%BA%E6%96%B0%E7%9A%84%EF%BC%89%E9%80%89%E9%A1%B9%EF%BC%9F.png)
如何从标准(系统)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