Linux

如何從 systemd 單元文件中刪除(不覆蓋,不創建新)選項?

  • March 14, 2020

如何從標準(系統)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 是否正確,但這是一般的想法。我只想生成兩種主機密鑰類型,而不是全部。

在 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

引用自:https://unix.stackexchange.com/questions/572790