通过中间主机 scp “管道” 文件

通过中间主机 scp “管道” 文件

这有点像这个问题。假设我在计算机上A,想要将文件发送到计算机C。我们每个人都可以单独访问主机BA并且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,然后开始向其传输数据。

相关内容