如何從 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

相關內容