如何使用 ssh 下载流?

如何使用 ssh 下载流?

在远程机器上,我想启动一个命令,慢慢产生一个大流(流压缩),并同时开始下载该流。我不想先将流保存在远程文件中,因为生成整个内容需要时间,之后下载它也需要时间。我想并行压缩和下载以节省时间。我可以通过 ssh/scp 连接到远程机器

我看见:如何将命令的(巨大)输出直接 scp 到远程机器?

但我想拉,而不是推

答案1

你也可以用类似的方法:

ssh -T [email protected] 'producing_command' > big.txt

只需在服务器上运行生产命令并写入本地文件。

答案2

虽然我同意通过 STDOUT 和 SSH 进行管道输出的答案,但我想提供一种不同的观点:

您可以在远程计算机上使用 SSHfs(FUSE 文件系统)从本地计算机挂载目录,然后写入该目录。如有必要,可以通过从本地计算机到远程计算机的连接将数据隧道传输回去。

示例 A:

LOCAL$  ssh [email protected]
REMOTE$ sshfs [email protected]:/directory/on/localmachine /directory/on/remotemachine
REMOTE$ bigstreamcommand >/directory/on/remotemachine/bigstreamfile

因此,输出将缓慢写入/directory/on/localmachine/bigstreamfile

如果您无法通过直接 SSH(无端口转发的 NAT、CGNAT、防火墙等)从远程计算机访问本地计算机,请按照
示例 B 进行操作:

LOCAL$  ssh [email protected] -R54223:localhost:22
REMOTE$ sshfs -p54223 user@localhost:/directory/on/localmachine /directory/on/remotemachine
REMOTE$ bigstreamcommand >/directory/on/remotemachine/bigstreamfile

示例 B 运行的唯一要求是,您在本地计算机上运行 SSH 服务器。您将 sshfs 连接到 localhost:54223,因为这是来自远程计算机的反向隧道,它会将所有连接重定向回您的初始 SSH 连接并重定向到本地计算机上的 SSH 服务器。

它可能不那么直接,但它更灵活,因为你可以直接在本地文件系统上从远程计算机执行任意文件操作。我不建议运行需要大量数据需要通过这种方式传输,因为这些数据当然需要从本地计算机发送到远程计算机,而对于住宅连接而言,这往往很慢。将大文件写入本地计算机应该会快得多,就像住宅连接的下载带宽更大一样。

更多细节,请重读然后 咨询man sshfs.

相关内容