Expressões regulares e sed podem ajudar com coisas como esta.
sed -re 's/^(PasswordAuthentication)([[:space:]]+)no/yes/' -i.'date -I' /etc/ssh/sshd_config
No meu sistema Debian, isso alternará PasswordAuthentication no
para PasswordAuthentication yes
, independentemente do número de espaços entre a chave e o valor.
Ele substituirá a opção no arquivo (edição no local) ao criar um backup do arquivo original, com um sufixo nomeado pela data ( sshd_config.2014-05-28
).
Troque de lugares para sim e não para alternar o contrário.
A expressão para remover um #
inicial é algo assim:
sed -re 's/^(\#)(PasswordAuthentication)([[:space:]]+)(.*)//'
e para inserir um #
-sign inicial:
sed -re 's/^(PasswordAuthentication)([[:space:]]+)(.*)/#/'
Para alternar uma linha com um opcional #
-sign na frente (Thanks Barlop):
sed -re 's/^(\#?)(PasswordAuthentication)([[:space:]]+)no/yes/'
Em todas essas expressões você pode alterar PasswordAuthentication
para qualquer outra opção que você queira alterar - provavelmente até torná-la uma chave em um script de shell, e fazer uma "ferramenta de alternância de opções sshd".
Sed e regex são divertidos e divertidos, mas tenho certeza que Valentin está certo sobre o gerenciamento de configuração ser o caminho a percorrer se você tiver muitos sistemas. Pessoalmente eu apenas uso o etckeeper / bazaar em alguns sistemas que raramente mudam - não é gerenciamento de configuração, mas me dá versionamento, então eu posso recuperar uma configuração de trabalho depois que eu estraguei tudo com regex e sed -i
. :)