Регулярные выражения и sed могут помочь с такими вещами.
sed -re 's/^(PasswordAuthentication)([[:space:]]+)no/\1\2yes/' -i.`date -I` /etc/ssh/sshd_config
В моей системе Debian это переключит PasswordAuthentication no
на PasswordAuthentication yes
, независимо от количества пробелов между ключом и значением.
Он заменит параметр в файле (редактирование на месте) при создании резервной копии исходного файла с суффиксом, названным датой (sshd_config.2014-05-28
).
Поменяйте местами для да и нет, чтобы переключиться в другую сторону.
Выражение для удаления ведущего #
выглядит примерно так:
sed -re 's/^(\#)(PasswordAuthentication)([[:space:]]+)(.*)/\2\3\4/'
и для вставки начального знака #
:
sed -re 's/^(PasswordAuthentication)([[:space:]]+)(.*)/#\1\2\3/'
Чтобы переключить строку с необязательным знаком #
перед (спасибо, Barlop):
sed -re 's/^(\#?)(PasswordAuthentication)([[:space:]]+)no/\2\3yes/'
Во всех этих выражениях вы можете изменить PasswordAuthentication
на любой другой параметр, который вы хотите изменить - возможно, даже сделать его ключом в скрипте оболочки и создать "инструмент переключения опции sshd".
Sed и regex - это все веселье и игры, но я уверен, что Валентин прав в том, что управление конфигурацией - это путь, если у вас много систем. Лично я просто использую etckeeper/bazaar на нескольких системах, которые меняются очень редко - это не управление конфигурацией, а обеспечение версионности, так что я могу получить рабочую конфигурацию после того, как я испортил regex и sed -i
. :)