Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ssh的stderr和stdout?_Ssh_Expect_Output - Fatal编程技术网

ssh的stderr和stdout?

ssh的stderr和stdout?,ssh,expect,output,Ssh,Expect,Output,我不清楚ssh的stdout和stderr,因为如果我执行以下命令: sshuser@remotemachine_ip“一些命令” 我在屏幕上立即得到输出,或者可能是某个错误 1.使用ssh登录 2.远程命令在远程机器上执行 3.输出显示在我可以看到的远程机器(stderr或stdout)上。 然后它返回到本地机器 或 输出返回到本地机器的标准输出,可以将其附加到本地机器上的文件中 所以如果我在本地机器中有一个for循环 for i in ip1 ip2 do ssh user@remotema

我不清楚ssh的stdout和stderr,因为如果我执行以下命令:

sshuser@remotemachine_ip“一些命令” 我在屏幕上立即得到输出,或者可能是某个错误

1.使用ssh登录

2.远程命令在远程机器上执行

3.输出显示在我可以看到的远程机器(stderr或stdout)上。 然后它返回到本地机器

输出返回到本地机器的标准输出,可以将其附加到本地机器上的文件中

所以如果我在本地机器中有一个for循环

for i in ip1 ip2
do
ssh user@remotemachine_ip  "some command" 
done
错误重定向的最佳方式是什么?它是否依赖于for、while和until循环

如果我使用的不是ssh而是expect脚本呢


expectscript.expuser@remotemachine_ip“some command”
SSH
是一种协议,允许您登录远程计算机,就像登录本地计算机一样

在本地计算机中,如果您运行一个登录shell(例如
Ctrl+Alt+F1~6
),它将为用户启动一个新shell,并且输出(
stdout
stderr
)将直接显示在您的监视器上

现在让我们看一下你的SSH案例,这些步骤和上次一样,只有一个区别,而不是将输出(再次是代码> STDUD/<代码>和代码> STDRR )发送给监视器,服务器将数据发送回从登录的机器到<代码> SSH客户端< /代码>。客户端在本地计算机上运行,因此在本地计算机的监视器上只显示相同的输出

但是,如果要将
stdout
和/或
stderr
重定向到一个文件,当您在远程机器上的shell中时,该文件将在远程机器上,因为您正在运行的实际程序是在远程机器上执行的

顺便说一句,SSH不仅仅是向远程机器发送/接收数据,它还加密数据,还有很多其他功能

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
将所有输出放在一个文件中

错误重定向的最佳方式是什么

如果我只关注stderr重定向,以下可能是解决方案之一:

for ip in ip1 ip2
do
  ssh user@$ip "some command" >output.$ip 2>output.$ip.err
done
ssh looks支持远程stdout到本地stdout和远程stderr到本地stderr,这样上面的脚本就可以像我期望的那样运行了。

ssh user@$ip "some command" >output.$ip 2>output.$ip.err

expect脚本中,
stdout
stderr
的重定向将被忽略(expect将截获重定向的输出。在expect脚本中,您可以添加log\u用户0并使用
stdout
重定向调用脚本,这将起作用(尽管
stderr
行不通)

你的问题不是很清楚。你具体想做什么?没有单一的“最佳方法”,这取决于你需要什么。我在为多个ip地址在for循环中引导ssh的输出时确实遇到了问题,但我只获得了第一个ip的输出(如果重定向在for循环内)或最后一个ip(如果重定向在外侧)你发布的代码中没有重定向,因此很难判断你做错了什么。发布有问题的代码,不要只是笼统地描述它。如果可能的话,谢谢@Tux,你能给出多个IP的循环内重定向的示例吗。循环是否重要,因为我有多个IP地址和输出的重定向问题ut被附加到日志文件中,所以我想了解ssh是如何工作的