Angenommen, ich möchte die Datei /etc/ssh/sshd_config in RHEL 7 bearbeiten, um unsere SSH-Konfiguration zu sichern.
Ich möchte beispielsweise die Ciphers-Zeile ersetzen, das Original an Ort und Stelle lassen und es auskommentieren. Außerdem möchte ich in der Lage sein, den kürzesten Teil der Zeichenfolge als Schlüssel zu verwenden, damit Red Hat ihn nicht jedes Mal beschädigt, wenn sie das RPM/die ISO-Installation aktualisieren.
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
soll werden...
#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789 etc...
Ich habe versucht, eine neue Zeile in einer Testdatei zu suchen/hinzuzufügen, deren Dateiname „Testdatei“ ist und deren Inhalt „Dies ist meine Testdatei“ lautet. Ich habe versucht, „Nein, ist es nicht“ als neue Zeile hinzuzufügen, und bin kläglich gescheitert.
sed -i '/This is my test file./aNo it's not.' testfile
Wie würde ich dabei vorgehen und – noch wichtiger – was sind die Schlüsselkonzepte dahinter?
Antwort1
Ich habe es mit dem folgenden sed-Befehl versucht und es hat wunderbar funktioniert
Befehl
sed -i '/^Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-c/s/.*/#&\nCiphers abc-123,def-456,ghi-789/g' filename
Ausgabe
#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789
Antwort2
sed -i -n 'p; s/^Ciphers/#&/p' /etc/ssh/sshd_config
-i
an Ort und Stelle
-n
druckt nichts, sofern es nicht explizit gedruckt wird
/p
am Ende der Suchzeichenfolge erzwingt den Ausdruck und überschreibt damit effektiv -n
die übereinstimmende Zeichenfolge