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 确实使用两个通道来传输 stdout 和 stderr,因此远程命令 stderr 将最终出现在ssh
的 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"