Como fazer o ssh em vários ipaddress e obter a saída e erro na máquina local * nix?

2
command="ls -lrt;uname -a;uname -o"
for i in 10.38.227.229 10.38.164.103
do
ssh auto21@$i "$command 2>&1" >> log
#ssh -n auto21@$i "$command" 2> >> log
done

Eu estou tentando várias coisas, mas nada parece funcionar eu recebo a saída remota de apenas o primeiro ip

no arquivo de log

    
por munish 26.02.2013 / 15:10

1 resposta

2

Você faz o 2>&1 na máquina remota. Então você está realmente fazendo:

ssh auto21@$1 'ls -lrt;uname -a;uname -o 2>&1' >> log

O que significa que você está apenas redirecionando o stderr do último comando uname .

Escreva:

command="ls -lrt;uname -a;uname -o"
for i in 10.38.227.229 10.38.164.103
do
  ssh "auto21@$i" "$command"
done >> log 2>&1

ssh usa dois canais para transferir stdout e stderr, então o stderr de comandos remotos vai acabar no stderr de ssh . Acima nós mesclamos o loop inteiro (e assim ssh) stderr em stdout em log .

Ou escreva:

command="ls -lrt;uname -a;uname -o"
for i in 10.38.227.229 10.38.164.103
do
  ssh "auto21@$i" "{ $command; } 2>&1"
done >> log

Isso é o stderr mesclado no stdout no final remoto, mas para todos os comandos, não apenas o último. Ou alternativamente:

  ssh "auto21@$i" "exec 2>&1; $command"
    
por 26.02.2013 / 15:44