我不清楚ssh beacasuse的stdout和stderr如果我执行说:
ssh user @ remotemachine_ip“some command” 我立即在屏幕上获得输出或可能是一些错误
1.使用ssh
2.远程计算机上执行远程命令
3.输出显示在我可以看到的远程机器(stderr或stdout)上。 然后它回到本地机器。
或
输出返回本地计算机的标准输出,可以附加到本地计算机上的文件中。
所以如果我在本地机器上有一个for循环
for i in ip1 ip2
do
ssh user@remotemachine_ip "some command"
done
错误重定向的最佳方法是什么,它依赖于for while while循环
如果不使用ssh我会使用一些期望脚本
expectscript.exp user@remotemachine_ip "some command"
答案 0 :(得分:3)
SSH
是一种允许您登录远程计算机的协议,就像您在本地计算机上登录一样。
如果您运行登录shell(例如Ctrl + Alt + F1~6
之一),则在本地计算机中,它会为用户启动一个新shell,并且输出(stdout
和stderr
)正确在你的显示器上。
现在让我们来看看你的SSH情况,步骤与上次类似,只有一个区别,而不是将输出(再次stdout
和stderr
)发送到监视器,服务器将数据发送回您登录的计算机 - SSH client
。客户端在本地计算机上运行,因此只在本地计算机的监视器上显示相同的输出。
但是如果您要将stdout
和/或stderr
重定向到文件,当您在远程计算机上的shell中时,该文件将位于远程计算机上,因为你正在运行的实际程序是在远程机器上执行的。
BTW SSH
不仅仅是向远程计算机发送数据/从远程计算机接收数据,还可以对数据进行加密等等。
答案 1 :(得分:3)
for ip in ip1 ip2
do
ssh user@$ip "some command" > output.$ip 2>&1
done
会将输出放在每个IP的单独文件中。
for ip in ip1 ip2
do
ssh user@$ip "some command"
done > output 2>&1
将所有输出放在一个文件中。
答案 2 :(得分:1)
错误重定向的最佳方法是什么
如果我专注于stderr重定向,以下可能是解决方案之一:
for ip in ip1 ip2
do
ssh user@$ip "some command" >output.$ip 2>output.$ip.err
done
ssh look支持远程stdout到本地stdout,远程stderr到本地stderr,以便上面的脚本按照我的预期运行。
答案 3 :(得分:0)
如果你把
ssh user@$ip "some command" >output.$ip 2>output.$ip.err
在期望脚本中,stdout
和stderr
的重定向将被忽略(期望将拦截重定向的输出。在 expect 脚本您可以添加 log_user 0 并调用stdout
重定向的脚本,这样就行了(虽然stderr
无处可去)