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
ssh
sshは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"