这有点像这个问题。假设我在计算机上A
,想要将文件发送到计算机C
。我们每个人都可以单独访问主机B
。 A
并且C
无法直接通信,也B
无法发起与任何一方的连接。
有没有办法将大文件传输到 SSH 并创建某种流,然后我可以告诉计算机用户C
连接到该流?文件大于 上的可用空间B
。我目前的解决方案是,对于split
大文件,依次上传每个段,当 用户C
下载完一个块通知我时,我会删除该块并上传下一个。
答案1
如果我理解正确的话,您想将数据从 A 发送到 C,但是两台计算机都无法连接到另一台,但它们都可以连接到 B。B 无法连接到任何人。
一解决方案是使用端口转发。C 可以从 B 上的端口转发到其 SSH 端口(端口 22):
ssh -R 1088:localhost:22
1088 是任意的,选择一个尚未使用的端口。默认情况下,此端口仅在本地计算机上可用,即只有在 B 上运行的进程才能连接到它。
现在 A 上的用户可以直接连接到 C:
ssh B "ssh -p 1088 localhost"
或者例如,此命令将从 A 发送文件到 C:
cat infile | ssh B "ssh -p 1088 localhost \"cat > outfile\""
或者,A 可以转发其端口,从而允许 C 上的用户启动复制。
其他解决方案是使用命名管道。在 B 上执行:
mkfifo named_pipe
然后在 A 上你可以使用以下命令将数据发送到管道:
cat infile | ssh B "cat > named_pipe"
此命令将挂起,直到有人打开管道的另一端并从中读取数据。例如,C 上的用户可以执行:
ssh B "cat named_pipe" > outfile
这会将文件从 A 通过 B 发送到 C。
答案2
是的,你可以创建一个命名管道供他们拉取。确保先创建管道,让他们从计算机连接C
,然后开始向其传输数据。