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 . :)