小编Gre*_*ers的帖子

ssh无法可靠地从远程命令返回输出

跟我说,描述很长.

在perl中我想执行一个简单的远程命令并使用perl :: Expect捕获输出.但是我发现我的结果数组有时是空的.我做了很多实验,并且相信问题是我的远程ssh连接正在终止,成功之后,远程命令可以刷新到stout.

  • 无论是直接从bash命令行运行perl :: Expect还是ssh,行为都是一样的.
  • 我的数据中心中的所有主机都有此行为.主机负载越多,错误就越频繁.对于繁重的主机,我有15%的时间没有得到结果.较轻的主机上的错误率接近0.
  • 远程命令无关紧要.
  • 我知道我已经通过密码提示并进入远程主机.使用'ssh -vvv'我看到每次都执行远程命令.
  • 我已经通过执行一个尾随的伪命令并检查远程返回代码来实验,希望能够刷新stdout缓冲区.没有什么是可靠的.

以下示例已编辑用户/组/主机名.除此之外,输出是未经编辑的剪切和粘贴.

> while true ; do echo "start"; ssh -l user host 'date; ls -l abc; echo $?'; echo "end"; done
start
Password:
Mon Oct  6 13:06:51 PDT 2014
-rw-r--r-- 1 user group 34538 Dec  6  2012 abc
0
end
start
Password:
end
start
Password:
Mon Oct  6 13:06:54 PDT 2014
end

如果我将远程命令发送到虚拟文件,那么stdout也会被刷新,并且我每次都能可靠地从我的命令中获取输出.不幸的是,这是一个黑客的工作.

while true ; do echo "start"; ssh -l user host 'date | tee -a /tmp/date.txt' ; …

ssh bash perl

6
推荐指数
1
解决办法
1693
查看次数

标签 统计

bash ×1

perl ×1

ssh ×1