Execute o comando em várias máquinas e imprima o endereço IP correspondente também

0

Estou executando um mesmo comando grep em várias máquinas da máquina de bastiões. Além dos resultados do grep, também quero imprimir o endereço IP correspondente.

ssh [email protected] sudo grep -A 2 hi /home/abc.txt
ssh [email protected] sudo grep -A 2 hi /home/abc.txt

Eu tentei:

ssh [email protected] "sudo grep -A 2 hi /home/abc.txt && hostname" 
ssh [email protected] "sudo grep -A 2 hi /home/abc.txt && hostname"

Mas apenas imprimiu o nome do host de 1.5.3.9 machine no final e também apenas uma vez.

Qual é a melhor maneira de fazer isso?

    
por earl 26.09.2018 / 00:03

1 resposta

2

Bem, você já tem o endereço IP; então você pode usá-lo:

for host in 1.5.4.7 1.5.3.9; do
    ssh core@$host "sudo grep -A 2 hi /home/abc.txt" && \
    printf "%s\n" "$host"
done

A execução de hostname , como se você estivesse no código de exemplo em sua pergunta, produzirá o hostname , não o endereço IP que você disse querer.

Usar && para separar comandos só executará o comando subseqüente se (e somente se) o código de saída do comando pré-definido for zero; se grep não encontrar correspondências, não retornará um zero e o segundo comando não será executado.

Além disso, apesar de não saber muito sobre seu caso de uso específico, geralmente acho mais fácil executar coisas assim para mostrar o host antes da saída do que deve ser executado no host em vez do que após , mas isso é tão simples quanto mover a instrução printf (ou, se preferir, você pode usar echo "$host" em seu lugar).

    
por 26.09.2018 / 18:06