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