Wyrażenia regularne i sed mogą pomóc w takich rzeczach.
sed -re 's/^(PasswordAuthentication)([[:space:]]+)no/\1\2yes/' -i.`date -I` /etc/ssh/sshd_config
W moim systemie Debian nastąpi przełączenie PasswordAuthentication no
na PasswordAuthentication yes
, niezależnie od liczby spacji między kluczem a wartością.
Zastąpi opcję w pliku (edycja na miejscu) podczas tworzenia kopii zapasowej oryginalnego pliku z sufiksem nazwanym według daty ( sshd_config.2014-05-28
).
Zmień miejsce na tak i nie, aby przełączyć się w drugą stronę.
Wyrażenie usuwania wiodącego #
jest mniej więcej takie:
sed -re 's/^(\#)(PasswordAuthentication)([[:space:]]+)(.*)/\2\3\4/'
i wstawianie wiodącego #
znaku:
sed -re 's/^(PasswordAuthentication)([[:space:]]+)(.*)/#\1\2\3/'
Aby przełączyć linię z opcjonalnym #
znakiem -z przodu (dzięki Barlop):
sed -re 's/^(\#?)(PasswordAuthentication)([[:space:]]+)no/\2\3yes/'
We wszystkich tych wyrażeniach możesz zmienić PasswordAuthentication
dowolną opcję, którą chcesz zmienić - prawdopodobnie nawet uczynisz ją kluczem w skrypcie powłoki i utworzysz „narzędzie przełączania opcji sshd”.
Sed i regex to cała zabawa i gry, ale jestem pewien, że Valentin ma rację, jeśli chodzi o zarządzanie konfiguracją, jeśli masz wiele systemów. Osobiście używam etckeeper / bazaar na kilku systemach, które bardzo rzadko się zmieniają - to nie jest zarządzanie konfiguracją, ale daje mi wersjonowanie, więc mogę odzyskać działającą konfigurację po tym, jak spieprzyłem regex i sed -i
. :)
#
podczas wyszukiwania zawierało znak opcjonalny , ale nie zamieniło go? Chcę usunąć znak # przedPasswordAuthentication
, tylko jeśli istnieje.