请注意,我无法先将文件存储在本地——它太大了。
这个(令人讨厌的)页面(一直滚动到底部)似乎给出了答案,但我无法解开特定于磁带驱动器的部分:
为了更具体一点,你可以这样想可能工作:
在本地机器上:
% echo "pretend this string is a huge amt of data" | scp - remote.com:big.txt
(这是使用约定 —— 事实上 scp 并不支持 —— 用破折号代替源文件来告诉它从 stdin 获取。)
答案1
您可以通过管道连接到 ssh 并运行远程命令。在本例中,远程命令cat > big.txt
会将 stdin 复制到big.txt
文件中。
echo "Lots of data" | ssh [email protected] 'cat > big.txt'
这很简单直接,只要您可以使用 ssh 连接到远程端即可。
您还可以使用nc
(NetCat)传输数据。在接收机器上(例如 host.example.com):
nc -l 1234 > big.txt
这将设置nc
为监听端口 1234,并将发送到该端口的任何内容复制到文件中big.txt
。然后,在发送机器上:
echo "Lots of data" | nc host.example.com 1234
此命令将告诉nc
发送方连接到接收方的端口 1234 并通过网络从 stdin 复制数据。
然而,该nc
解决方案有一些缺点:
- 无需身份验证;任何人都可以连接到端口 1234 并将数据发送到该文件。
- 数据并未加密,就像 一样
ssh
。 - 如果任何一台机器位于防火墙后面,则必须打开所选端口以允许连接通过并正确路由,尤其是在接收端。
- 两端必须同时独立设置。使用此
ssh
解决方案,您只需从其中一个端点启动传输即可。
答案2
使用 ssh:
echo "pretend this is a huge amt of data" | ssh [email protected] 'cat > big.txt'
答案3
使用数控(Net Cat),它不需要在本地保存文件。
答案4
使用 FIFO 管道:
mknod mypipe p
scp mypipe destination &
ls > mypipe