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"