通过 ssh 将 stdin/stdout 重定向到远程主机/从远程主机重定向
我正在尝试编写一个 perl 脚本,将其标准输入重定向到远程计算机,同时将远程计算机的标准输出重定向到其标准输出:
callingProgram <--> myScript <--> sshTunnelToRemote
请参阅 这个问题 和 bdonlan 出于脚本目的的回答。
首先,我尝试使用 IPC 库中的 open2()
函数,但由于描述的原因here 这似乎不是一个好方法,我什至没有让一个简单的 grep 命令起作用。
我的第二个想法是使用 Net::SSH::Perl
或 Expect
库,但它们在应该执行脚本的计算机上不可用,并且我无法在那里安装库。
所以我的问题是什么是实现我想要的简单方法?使用 bash 甚至 C++ 的解决方案也是可能的。目标平台是 Solaris 10。
I'm trying to write a perl script that redirects its stdin to a remote machine and at the same time redirects the stdout of the remote machine to its stdout:
callingProgram <--> myScript <--> sshTunnelToRemote
See this question and bdonlan's answer for the purpose of the script.
First I tried to use the open2()
function from the IPC library but for reasons described here it doesn't seem to be a good approach, I didn't even get a simple grep
command working.
My second idea was to use the Net::SSH::Perl
or the Expect
libraries but they're not available on the machine where the script is supposed to be executed and I can't install libraries there.
So my question is what could be a simple way to achieve what I want? Solutions using [ba]sh or even C++ are also possible. The targeted platform is Solaris 10.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看起来你可能只需要
system()
就可以逃脱惩罚——不要将数据从你的 stdin 传递到 ssh 的 stdin 以及从你的 stdout 传递到 ssh 的 stdout;只需让 ssh 继承您的标准输入和标准输出即可。除非您需要以某种方式修改传输中的数据。Seems like you could probably get away with nothing more than
system()
— don't pass the data from your stdin to ssh's stdin and from your stdout to ssh's stdout; just let ssh inherit your stdin and stdout. Unless you need to modify the data in transit somehow.cpanminus 可以为您完成此操作
运行:
现在您可以使用正确的工具(例如
Net::SSH::Perl
)来尝试您的问题。Perl 的强大之处在于 cpan,cpanminus 使您能够安装所需的任何内容,即使您没有安装到系统范围库的权限。
阅读模块文档了解完整详细信息。
cpanminus can do this for you
Running:
Now you can try your problem using the right tools (e.g.
Net::SSH::Perl
).The power of perl is cpan, and cpanminus gives you the ability to install whatever you need even if you don't have permission to install to the system-wide libraries.
Read the module documentation for the full details.