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