如何将命令的(巨大)输出直接发送到远程机器?

dre*_*ves 57 scp

请注意,我不能先将文件存储在本地——它太大了。

这个(令人讨厌的)页面(一直滚动到底部)似乎给出了答案,但我无法解开特定于磁带驱动器的部分:

http://webcache.googleusercontent.com/search?q=cache:lhmh960w2KQJ:www.experts-exchange.com/OS/Unix/SCO_Unix/Q_24249634.html+scp+redirect&cd=3&hl=en&ct=clnk&gl=us

为了使这更具体,以下是您认为它可能起作用的方式:

在本地机器上:

% echo "pretend this string is a huge amt of data" | scp - remote.com:big.txt
Run Code Online (Sandbox Code Playgroud)

(这是使用约定 - scp 实际上不支持 - 用破折号代替源文件告诉它从 stdin 获取它。)

Bar*_*own 85

您可以通过管道连接到 ssh 并运行远程命令。在这种情况下,远程命令是cat > big.txt将标准输入复制到big.txt文件中。

echo "Lots of data" | ssh user@example.com 'cat > big.txt'
Run Code Online (Sandbox Code Playgroud)

简单明了,只要你可以使用ssh连接到远程端。

您还可以使用nc(NetCat) 传输数据。在接收机器上(例如,host.example.com):

nc -l 1234 > big.txt
Run Code Online (Sandbox Code Playgroud)

这将设置nc为侦听端口 1234 并将发送到该端口的任何内容复制到big.txt文件中。然后,在发送机器上:

echo "Lots of data" | nc host.example.com 1234
Run Code Online (Sandbox Code Playgroud)

该命令将告诉nc发送方连接到接收方的 1234 端口,并通过网络从标准输入复制数据。

但是,该nc解决方案有一些缺点:

  • 没有身份验证;任何人都可以连接到端口 1234 并将数据发送到文件。
  • 数据未加密,就像使用ssh.
  • 如果任一机器在防火墙后面,则必须打开所选端口以允许连接通过并正确路由,尤其是在接收端。
  • 两端必须独立且同时设置。使用该ssh解决方案,您可以仅从端点之一启动传输。


bpf*_*bpf 15

使用 ssh:

echo "pretend this is a huge amt of data" | ssh user@remote.com 'cat > big.txt'
Run Code Online (Sandbox Code Playgroud)


mca*_*dre 5

使用nc(Net Cat),不需要在本地保存文件。

  • 我强烈建议不要为此使用“nc”。我曾经将原始磁盘映像从一台机器转储到另一台机器,但很久之后才发现我的网络驱动程序有故障并传输了错误的位。使用“scp”、“ssh”或其他任何可以告诉您何时出现传输错误的内容。 (3认同)