como alterar o valor dos arquivos do sistema sem abri-los?

0

Existe alguma maneira de alterar o valor de "PermitRootLogin" em /etc/ssh/sshd_config através de um comando no terminal?

Eu quero alterar os valores deste arquivo sem abri-lo e alterar o valor "PermitRootLogin" de yes para no.

    
por Freeman 23.11.2015 / 21:05

6 respostas

4

É perfeitamente possível fazer isso com sed , corresponder à linha e alterar o valor:

sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
  • ^PermitRootLogin corresponde à linha que começa com PermitRootLogin
  • s/yes/no altera o valor da opção de "sim" para "não"
por solsTiCe 23.11.2015 / 22:57
1
% bl0ck_qu0te%

Neste caso, eu usaria o Perl (ou seja, algo que funciona com campos e que pode editar no local; o Sed falha no primeiro e o AWK falha no segundo):

sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
% grep ^PermitRootLogin /etc/ssh/sshd_config                                                     
PermitRootLogin without-password
% sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
[sudo] password for user: 
% grep ^PermitRootLogin /etc/ssh/sshd_config                                              
PermitRootLogin no
    
por kos 23.11.2015 / 21:35
0

Você pode alterá-los com sed, use a opção -i

sed -i -e 's/old/new/g' file

Veja man sed for detials

link

    
por Panther 23.11.2015 / 21:09
0

Se você quer dizer "sem abrir o arquivo em um editor", isso é possível.

Por exemplo, você pode usar sed para substituir os padrões de expressão regular por sequências fixas:

sed 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE

O comando acima imprimirá o conteúdo do arquivo com linhas substituídas. Não irá executar as substituições, basta imprimir uma "prévia" !
Para aplicar as substituições depois de verificá-las, use o sinalizador -i ("substitute in place"):

sed -i 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE
    
por Byte Commander 23.11.2015 / 21:11
0

Qualquer programa que de alguma forma lide com arquivos precisa ter que emitir open() , bem como read() chamadas do sistema, que podem ser verificadas com strace . Abrir um arquivo sem essas chamadas do sistema é impossível

Sua pergunta parece perguntar se um arquivo pode ser editado sem o editor de texto. Isso é possível, como outros demonstraram. Minha pequena contribuição aqui é a seguinte:

awk '/^PermitRootLogin/{$2="yes"}1' /etc/ssh/sshd_config > /tmp/sshd_config && mv /tmp/sshd_config /etc/ssh/sshd_config

Basicamente com o AWK, encontramos a linha apropriada, substituímos o campo 2, que é "não" para "sim", exportamos tudo para o arquivo tmp e substituímos o original pelo arquivo tmp usando mv .

Lembre-se de que a propriedade desse arquivo de configuração pertence à raiz, portanto você precisaria de sudo access (adicione sudo before mv )

    
por Sergiy Kolodyazhnyy 24.11.2015 / 01:24
0

Você pode usar o Vim no modo Ex:

ex -sc '/^PermitRootLogin/s/yes/no/|x' /etc/ssh/sshd_config
  1. s substituto

  2. x salvar e fechar

por Steven Penny 16.04.2016 / 19:01