複数のIPアドレスでsshを使用してローカル* nixシステムから出力とエラーを取得するにはどうすればよいですか?

複数のIPアドレスでsshを使用してローカル* nixシステムから出力とエラーを取得するにはどうすればよいですか?
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

いくつかの方法を試していますが、何も動作しないようです。最初のIPへのリモート出力のみを取得します。

ログファイルに

答え1

2>&1リモートコンピュータでこれを行います。だから実際には次のことをしています。

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

これは、最後のコマンドのstderrのみをリダイレクトすることを意味しますuname

書き下ろす:

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

sshsshはstdoutとstderrを送信するために2つのチャネルを使用するため、リモートコマンドstderrはstderrで終了します。上記では、ループ全体(およびssh)のstderrをstdoutにマージしましたlog

または、次のように書かれます。

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

つまり、リモート側でstderrをstdoutにマージしますが、最後のコマンドだけでなくすべてのコマンドに対してマージします。または:

  ssh "auto21@$i" "exec 2>&1; $command"

関連情報