【问题标题】:Redirecting stdin/stdout to/from a remote host via ssh通过 ssh 将标准输入/标准输出重定向到远程主机/从远程主机重定向
【发布时间】:2011-04-17 04:45:29
【问题描述】:

我正在尝试编写一个 perl 脚本,将其标准输入重定向到远程机器,同时将远程机器的标准输出重定向到其标准输出:

callingProgram <--> myScript <--> sshTunnelToRemote

请参阅 this question 和 bdonlan 的答案以了解脚本的目的。

首先我尝试使用 IPC 库中的 open2() 函数,但由于 here 描述的原因,这似乎不是一个好方法,我什至没有得到一个简单的 grep 命令工作。

我的第二个想法是使用 Net::SSH::Perl 或 Expect 库,但它们在应该执行脚本的机器上不可用,我无法在那里安装库。

所以我的问题是什么是实现我想要的简单方法?使用 [ba]sh 甚至 C++ 的解决方案也是可能的。目标平台是 Solaris 10。

【问题讨论】:

  • 解释为什么/是什么让你认为你“不能在那里安装库”。
  • 我试过了。安装程序尝试在我没有写入权限的位置创建文件,因此失败。
  • 隧道用于套接字。 open2 不创建套接字。您想创建一个套接字,将其连接到隧道,然后将该套接字复制到 STDIN 和 STDOUT。

标签: perl proxy ssh redirect


【解决方案1】:

看起来你可能只需要system()就可以逃脱惩罚——不要将数据从你的标准输入传递到ssh的标准输入,从你的标准输出传递到ssh的标准输出;让 ssh inherit 你的标准输入和标准输出。除非您需要以某种方式修改传输中的数据。

【讨论】:

  • 感谢您的回答。我将如何实现这种继承?
  • @Deve 什么都不做,然后打电话给system("ssh", "remotehost", "somecommand")。
  • 嗯,我不知道我是否明白你的想法。 somecommand 会是什么?调用脚本时未知。我想我会安装支持 -W 选项的更新版本的 ssh。
【解决方案2】:

cpanminus can do this for you

跑步:

cd ~/bin
curl -LO http://xrl.us/cpanm
chmod +x cpanm

现在您可以使用正确的工具(例如Net::SSH::Perl)尝试您的问题。

perl 的强大之处在于 cpan,而 cpanminus 使您能够安装所需的任何内容,即使您没有安装到系统范围库的权限。

阅读the module documentation了解完整详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多