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

我正在尝试解决一个有趣的问题。 我有一个JumpBox服务器,为了安全地ssh进入客户端的服务器。 这是我的客户端打开端口22的唯一服务器。 但是,这个JumpBox服务器非常小,没有足够的空间容纳大文件(大于5GB)。

所以,我为这个目的build立了一个更大的磁盘服务器,但是我不希望客户端必须打开端口22到另一个IP地址。

服务器T =传送箱

服务器J =跳箱

服务器C = Clientbox

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

谢谢,让我知道如果我需要澄清任何事情

可悲的是,SCP目前不支持这一点。 但是你可以在J上使用sshfs,装载T和C,然后从J上复制(使用cp)从装载点T到装载点C.

如果您将autofs和sshfs结合使用,那么/ net(带有一个可执行的automount-map)就可以工作,您可以自动获得一个自动解决scheme。

我已经看到了CentOS的sshfs解决scheme。

从“T”开始,你应该在“J”上打开一个ssh隧道,在“C”上转发到SSH。 从那里你可以跳过J从T到SSH上的任何事情。 有关更多信息,请参阅轻松使用SSH隧道

所以从你的“T”服务器,你可能会这样做:

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

在您需要数据的主机上,只需打开端口22222,即可从将要发送数据的主机接收TCP连接。

在主机接收数据,你可以使用类似的东西

 $ nc -l -p 22222 | tar xf - 

并在主机发送数据一旦上面的监听器就位

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

一旦数据传输,只需closures防火墙的孔; 如果你害怕忘记closures它,你可以打开它,比如说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)。

为什么不使用split,tar或zip实用程序将文件收集成小块,然后通过J单独传输每个块。当所有块都在C上时,只需展开tar / zip存档。

你的其他select是在T和J之间创build某种VPN。然后你可以尝试从T上挂载一个文件共享/导出,就像本地文件系统(NFS,FUSE等)一样。

其他选项是让你的客户端SSH进入J,并build立一个隧道(-L,-R),然后从J允许他们login到T.所以他们创build一个隧道C-> J-> T,然后T有可用的文件传输系统(FTP,HTTP)。 SSH隧道将根据需要发送数据包。

你最好的解决scheme将是获得更多的资源在你的JumpBox上。 如果你的客户给你钱,你应该投资一些适当的基础设施,所以你/他们不必浪费时间跳过篮球。

历史logging,这正是FTP协议被动模式创build的情况。 但是,由于账户信息是以明文forms发送的,所以不太可能被使用。

这里最简单的方法是使用nfs或sshfs将服务器T的驱动器挂载到跳转盘上: http ://fuse.sourceforge.net/sshfs.html不确定是否要保留权限,但是我相信你甚至可以在用户的​​系统上挂载sshfs文件夹,login。