Ich versuche, die Konfiguration bestimmter Parameter in meiner /etc/ssh/sshd_config
Datei zu automatisieren, insbesondere die
#PermitRootLogin yes
Und
#LoginGraceTime 2m
Sie sollten lauten:
PermitRootLogin no
LoginGraceTime 60
Ich bin kein Skript-Ass, also haben Sie bitte Geduld mit mir …
Ich habe versucht, sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
den Ball ins Rollen zu bringen, aber das Ergebnis ist seltsam. Es wird einfach die Datei ausgeblendet, an der ich gerade arbeite ...
Kann mir jemand die Verwendung von sed erklären?
Antwort1
Leiten Sie die Ausgabe in eine temporäre Datei um und benennen Sie die temporäre Datei anschließend in die Originaldatei um
sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config
Oder wenn Sie GNU haben, können Sie die Option für die Bearbeitung direkt vor Ort sed
verwenden-i
sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
Antwort2
Ähnlich wie @Bodos Antwort, aber diese Lösung lässt die Originalzeile unberührt und fügt die geänderte Version unterhalb der Originalzeile hinzu. Dies ist nur sinnvoll, wenn Sie die Originalzeile als Kommentar behalten möchten.
sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config
Hier verwenden wir eine Erfassungsgruppe \(...\)
, die beim Ersetzen durch ersetzt wird \1
(weil wir zu faul sind, dieselbe Zeichenfolge erneut einzugeben).
Sed mit Option -n
gibt nur die explizit gedruckten Zeilen aus, daher p
wird der erste Befehl zum Drucken der unveränderten Zeilen und die nächsten beiden Befehle zum Drucken der geänderten Zeilen verwendet.