Estou tentando automatizar a configuração de determinados parâmetros em meu /etc/ssh/sshd_config
arquivo, principalmente o
#PermitRootLogin yes
e
#LoginGraceTime 2m
Eles deveriam ler:
PermitRootLogin no
LoginGraceTime 60
Não sou um especialista em scripts, então, por favor, tenha paciência comigo ...
Tentei sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
fazer a bola rolar, mas obtive um resultado estranho. Ele simplesmente elimina o arquivo no qual estou tentando trabalhar ...
Alguém pode me orientar sobre o uso do sed?
Responder1
Redirecione a saída para um arquivo temporário e renomeie o arquivo temporário para o arquivo original
sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config
Ou se você tiver GNU sed
você pode usar a -i
opção de edição no local
sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
Responder2
Semelhante à resposta do @Bodo, mas esta solução deixa a linha original intacta e adiciona a versão modificada abaixo da linha original. Isso só faz sentido se você quiser manter a linha original como comentário.
sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config
Aqui usamos um grupo de captura \(...\)
que é substituído por \1
na substituição (porque temos preguiça de digitar a mesma string novamente).
Sed com a opção -n
gera apenas as linhas impressas explicitamente, então o primeiro p
é usado para imprimir as linhas não modificadas e os próximos dois comandos para imprimir as linhas modificadas.