从服务器C将文件从远程服务器A传输到远程服务器B

从服务器C将文件从远程服务器A传输到远程服务器B

我有一个有趣的问题需要解决。我有一个 JumpBox 服务器,用于安全地通过 SSH 连接到客户端的服务器。这是我的客户端唯一开放 22 端口的服务器。但是,这个 JumpBox 服务器非常小,没有足够的空间来容纳大文件(大于 5GB)。

因此,我为此目的设置了另一台具有更大磁盘的服务器,但我不希望客户端必须向另一个 IP 地址开放端口 22。

服务器 T = 传输箱

服务器 J = Jumpbox

服务器 C = 客户端盒

我可以从服务器 J 将服务器 T 上的文件传输到服务器 C 吗?

谢谢,如果我需要澄清任何事情,请告诉我

答案1

遗憾的是 scp 目前不支持此功能。但您可以在 J 上使用 sshfs,挂载 T 和 C,然后(使用 cp)在 J 上从挂载点 T 复制至挂载点 C。

如果您将 autofs 和 sshfs 按照 /net(带有可执行的 automount-map)的工作方式结合起来,您可能会得到一个可行的自动解决方案。

我曾在某处看到过使用 fuse 的 CentOS sshfs 解决方案。

答案2

从“T”,您应该在“J”上打开一个 ssh 隧道,该隧道转发到“C”上的 SSH。从那里,您可以从 T 跳转至 J,通过 SSH 在 C 上执行任何操作。请参阅SSH 隧道变得简单了解更多信息

因此,从你的“T”服务器,你可以做这样的事情:

ssh -f J-user@addr-of-J-server -L 2000:addr-of-C-server:22 -N

ssh C-user@localhost -p 2000

答案3

在需要数据的主机上,只需打开端口 22222,以便与将要发送数据的主机建立 TCP 连接。

在接收数据的主机上你可以使用类似

$ nc -l -p 22222 | tar xf -

一旦上面的监听器到位,主机就会发送数据

$ tar cf - files directories | nc -w1 ip.of.host.listening 2222

数据传输完成后,只需关闭防火墙漏洞即可;如果你担心自己可能会忘记关闭它,你可以打开它,比如说 30 分钟,例如

# (iptables -I INPUT -p tcp -s ip.of.host.sending.data --dport 22222 -j ACCEPT; sleep 30m;iptables -D INPUT -p tcp -s ip.of.host.sending.data --dport 22222 -j ACCEPT) &

如果您担心有人窥探您的数据;您可以使用 cryptcat 而不是 netcat (nc)。

答案4

从历史上看,FTP 协议被动模式正是为这种情况而设计的。但是,由于帐户信息是以明文形式发送的,因此不太可能再使用这种模式。

相关内容