24

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

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

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

5 回答 5

27

Netcat非常适合这个。这是一个包含一些常见示例的页面

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

  1. 服务器侦听连接,然后将输出发送给它:

    server$ my_script | nc -l 7777

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

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

于 2009-02-23T07:11:06.517 回答
16

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

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

在 Linux 上,您还可以使用/dev/tcp/<host>/<port>. 有关详细信息,请参阅高级 Bash 脚本指南

于 2009-02-23T07:23:49.293 回答
6

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

于 2009-02-23T07:05:20.570 回答
4

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

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

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

-q 秒

在标准输入上的 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偷了这个

于 2017-10-19T06:58:36.250 回答