Em vez de tentar fazer isso dessa maneira usando ssh
, convém usar uma ferramenta como pssh
. Este U & L Q & A intitulado: Executa um comando em múltiplos anfitriões, mas só imprime o comando se for bem sucedido? .
No seu caso, você pode usar o server
& arquivos de comando diretamente em pssh
da seguinte forma:
$ pssh -h server -i -I < commands.txt
Exemplo
Aqui eu construí os 2 arquivos a seguir:
$ cat servers
skinner
mulder
$ cat commands.txt
date
echo 'hi'
Agora, quando eu executo:
$ pssh -O ForwardX11=no -h servers -i -I < commands.txt
[1] 03:10:03 [SUCCESS] skinner
Fri Jul 17 03:10:03 EDT 2015
hi
[2] 03:10:04 [SUCCESS] mulder
Fri Jul 17 03:06:41 EDT 2015
hi
Você pode capturar a saída acima assim:
$ .... | tee some_log_file.txt
Ou você pode retirar a -i
e deixar pssh
criar arquivos de log separados para cada servidor usando a opção -o <dir>
.
$ pssh -O ForwardX11=no -h servers -o ~/somedir -I < commands.txt
[1] 03:13:04 [SUCCESS] skinner
[2] 03:13:04 [SUCCESS] mulder
Agora verifique os resultados:
$ ls somedir/
mulder skinner
$ cat somedir/*
Fri Jul 17 03:09:41 EDT 2015
hi
Fri Jul 17 03:13:03 EDT 2015