如何在多个 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

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"

相关内容