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.sed '/^PasswordAuthentication /{s/yes/no/;t;s/no/yes/}' -i /etc/ssh/sshd_config
i użyć gosed '/^PasswordAuthentication /{s/yes/no/;t;s/no/yes/}' -i /etc/ssh/sshd_config && grep '^PasswordAuthentication ' /etc/ssh/sshd_config && /etc/init.d/ssh reload
.Istnieje wiele opcji do wyboru:
Po próbie odgadnięcia, dokąd chcesz się udać, prawdopodobnie i tak warto rozważyć użycie zarządzania konfiguracją.
źródło
sed
?Augeas z narzędziem wiersza poleceń - augtool - może konfigurować
/etc/ssh/sshd_config
. Na przykład:Aby ustawić wszystkie wartości, użyj:
źródło
sshd_config
nie można go bezpiecznie edytować bez całkowitego przeanalizowania, ponieważ może zawieraćMatch
bloki.Augeas to dobra opcja, aby to osiągnąć, ale nie jest łatwo zarządzać wstawianiem opcji we właściwym miejscu, gdy są
Match
już bloki. Jedną z opcji jest użycie Puppet zsshd_config
dostawcą z siedzibą w Augeas :Ta opcja ma tę zaletę, że używa ścisłego parsera (Augeas z
Sshd.lns
soczewką) i poziomu abstrakcji (zasób marionetek), który zarządza złożonością ustawiania parametrów pozaMatch
blokami, ale także wewnątrz nich:źródło
PasswordAuthentication
abyno
w tosshd_config
?