Grep strings específicas dentro do arquivo de configuração

1

Estou tentando fazer um script bash que leia o arquivo .ssh / config e conecte-se a hosts que usam apenas o IdentityFile ou a chave ssh e execute comandos em servidores remotos. Portanto, o problema é que o arquivo de configuração contém hosts que não usam o IdentityFile e se conectam por meio de senhas. Como grep explicitamente Host e IdentityFile blocos no arquivo e descartar os outros? Eu já fiz script que se conecta a todos os hosts em arquivo com loop, mas não é isso que eu quero 100%. Obrigado. Meu arquivo .ssh / config se parece com isto:

Host centos7-mp1
        Hostname 192.168.89.102
        user root
        IdentityFile /root/.ssh/keys/id_rsa_passwordless


Host centos6-mp2
        Hostname 192.168.89.103
        user root
        IdentityFile /root/.ssh/keys/id_rsa_passwordless

Host centosvm-test
        Hostname 192.168.56.233
        user test
    
por Igor Mijatovic 24.03.2017 / 11:28

2 respostas

2

awk no modo de parágrafo é útil para este caso - onde você tem registros de múltiplas linhas que são separados por uma ou mais linhas em branco, por exemplo para imprimir o valor da chave Host (segundo campo) de registros correspondentes a IdentityFile que você pode fazer

awk '/IdentityFile/ {print $2}' RS= .ssh/config

Se você precisa corresponder IdentityFile sem diferenciação de maiúsculas e minúsculas, modifique isso para

awk 'toupper($0) ~ /IDENTITYFILE/ {print $2}' RS= .ssh/config

ou (com o GNU awk)

gawk '/IdentityFile/ {print $2}' RS= IGNORECASE=1 .ssh/config
    
por steeldriver 24.03.2017 / 12:48
0

String específica do grep dentro de um arquivo. Para grep:

$ grep -i 'string' ~/path/to/config/file/

Se isso é exatamente o que você quer ...

    
por saviour123 24.03.2017 / 12:43