systemd ユニット ファイルからオプションを削除する (上書きしない、新規作成しない) 方法は?

systemd ユニット ファイルからオプションを削除する (上書きしない、新規作成しない) 方法は?

標準 (システム) systemd ユニット ファイルから行を削除するにはどうすればよいでしょうか? 詳細は次のとおりです。

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

これは、未使用および不要なホスト キー タイプがあることを示しています。これらは では構成されていません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 に正しいかどうかはわかりませんが、それが一般的な考え方です。生成したいのは、すべてのホスト キー タイプではなく、2 つのホスト キー タイプだけです。

答え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

関連情報