Wie entferne ich Optionen aus Systemd-Unit-Dateien (ohne sie zu überschreiben oder neue zu erstellen)?

Wie entferne ich Optionen aus Systemd-Unit-Dateien (ohne sie zu überschreiben oder neue zu erstellen)?

Wie werden Zeilen aus einer Standard-(System-)Systemd-Unit-Datei entfernt? Hier sind die Details:

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

Dies zeigt, dass ich ungenutzte und unerwünschte Hostschlüsseltypen habe. Sie sind in meinem nicht konfiguriert sshd_config, aber ich ziehe es vor, dass sie überhaupt nicht existieren. Wenn ich sie entferne, werden sie automatisch neu generiert.

Soweit ich sehe, /usr/lib/systemd/system/sshd.servicesind darunter:

Wants=sshdgenkeys.service

Der Inhalt davon wird unten mit cat /usr/lib/systemd/system/sshdgenkeys.service angezeigt:

[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

Ich weiß, dass ich eine Unit-Dateieinstellung mit überschreiben oder erstellen kann systemctl edit, aberwie werden zeilen wie ConditionPathExists=|!/etc/ssh/ssh_host_dsa_keyentfernt?

Am Ende möchte ich ungefähr Folgendes erreichen:

[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

Ich bin nicht sicher, ob dieser Befehl für ssh-keygen richtig ist, aber das ist die Grundidee. Ich möchte nur zwei Hostschlüsseltypen generieren, nicht alle.

Antwort1

In systemd-Einheiten können Listen in Overrides normalerweise durch die Zuweisung eines leeren Wertes zurückgesetzt werden. Diesfunktioniert auch für Bedingungen:

Wenn einer dieser Optionen die leere Zeichenfolge zugewiesen wird, wird die Liste der Bedingungen vollständig zurückgesetzt. Alle vorherigen Bedingungseinstellungen (jeder Art) haben keine Auswirkung.

Verwenden Sie in Ihrer Überschreibung Folgendes:

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

verwandte Informationen