SSH: Como alterar o valor no arquivo de configuração em um comando

6

Como posso alterar o valor de, digamos, PasswordAuthentication em /etc/ssh/sshd_config em comandos?

Além disso, remova um # na frente da "chave" que desejo valorizar. Estes não precisam estar em um único comando. Eu configurei alguns servidores, e lembrando onde tudo está ficando exaustivo, então eu quero obter uma série de comandos que eu possa copiar e colar e fazer o trabalho para mim para referência futura.

Valores de amostra:

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
UseDNS no
    
por Brian Graham 27.05.2014 / 23:52

4 respostas

11

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

    
por 28.05.2014 / 00:36
5

Existem várias opções para escolher:

  • Puppet, Cfengine, Chef ou qualquer outra ferramenta de gerenciamento de configuração
  • Augeas (augtool - > print / arquivos / etc / ssh / sshd_config - > em seguida, use "conjunto")
  • sed -i
  • e muito mais

Depois de tentar adivinhar para onde você deseja ir, provavelmente desejará considerar o uso do gerenciamento de configurações de qualquer maneira.

    
por 28.05.2014 / 00:14
3

Augeas com sua ferramenta de linha de comando - augtool - pode configurar /etc/ssh/sshd_config . Por exemplo:

augtool --autosave 'set /files/etc/ssh/sshd_config/PasswordAuthentication yes'

Para definir todos os valores, use:

SSHD_UsePAM=no
SSHD_UseDNS=no
augtool << EOF
set /files/etc/ssh/sshd_config/PermitRootLogin no
set /files/etc/ssh/sshd_config/ChallengeResponseAuthentication no
set /files/etc/ssh/sshd_config/PasswordAuthentication no
set /files/etc/ssh/sshd_config/UsePAM ${SSHD_UsePAM}
set /files/etc/ssh/sshd_config/UseDNS ${SSHD_UseDNS}
save
EOF
    
por 31.05.2014 / 01:49
1

sshd_config não pode ser editado com segurança sem ser totalmente analisado, porque pode conter Match blocos.

O Augeas é uma boa opção para isso, mas não é muito fácil gerenciar as opções de inserção no lugar certo quando já há Match de blocos. Uma opção é usar o Puppet com o provedor sshd_config Augeas :

sshd_config { "PermitRootLogin":
  ensure => present,
  value  => "yes",
}

Esta opção oferece a vantagem de usar um analisador rigoroso (Augeas com a lente Sshd.lns ) e um nível de abstração (recurso Puppet) que gerencia a complexidade de definir parâmetros fora de Match blocos, mas também dentro deles :

sshd_config { "X11Forwarding":
  ensure    => present,
  condition => "Host foo User root",
  value     => "yes",
}
    
por 14.07.2014 / 18:28

Tags