用于管道到套接字的标准Unix命令行工具

时间:2009-02-23 07:02:15

标签: unix sockets command-line named-pipes

我有一些应用程序,标准的Unix工具将它们的输出发送到Solaris中的命名管道,但命名管道只能从本地存储中读取(在Solaris上),因此我无法通过网络访问它们或将管道放在NFS存储上,以便对其输出进行网络访问。

让我想知道是否有类似的方法将命令行工具的输出直接转发到套接字,例如:

mksocket mysocket:12345
vmstat 1 > mysocket 2>&1

5 个答案:

答案 0 :(得分:24)

Netcat非常适合这一点。这是一个page with some common examples

您的案例的用法可能如下所示:

  1. 服务器侦听连接,然后向其发送输出:

    server$ my_script | nc -l 7777

  2. 远程客户端连接到端口7777上的server,接收数据,保存到日志文件中:

    client$ nc server 7777 >> /var/log/archive

答案 1 :(得分:15)

netcat(也称为nc)正是您正在寻找的。它已经变得合理标准,但并非在所有系统上都可用。

socat似乎是netcat的增强版本,具有更多功能,但不常用。

在Linux上,您也可以使用/dev/tcp/<host>/<port>。有关详细信息,请参阅Advanced Bash-Scripting Guide

答案 2 :(得分:6)

netcat将帮助在网络上建立管道。

答案 3 :(得分:4)

您可能想要使用以下之一:

  1. ssh:安全(加密),已在Solaris上开箱即用 - 但您必须为非交互式会话设置密钥对
    • e.g。 vmstat 2>&1 | ssh -i private.key oss@remote.node "cat >vmstat.out"
  2. netcat:设置简单 - 但不安全且容易受到攻击

答案 4 :(得分:0)

每个人都使用netcat在正确的轨道上。但是我想补充一点,如果您要进入nc并期待响应,则需要使用-q <seconds>选项。从手册:

  

-q秒

     

在stdin上执行EOF后,等待指定的秒数然后退出。如果秒是负数,则永远等待。

例如,如果您想与SSH代理进行交互,可以执行以下操作:

echo -en '\x00\x00\x00\x01\x0b' | nc -q 1 -U $SSH_AUTH_SOCK | strings

更完整的示例位于https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

*我从https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html

偷走了这个