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 nona 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ć PasswordAuthenticationdowolną 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.