找出解决这个问题的方法,我感到很开心。在两台计算机上都需要工具nc(netcat),并且需要SSH(不需要SFTP)。
在此示例中,我将调用具有需要备份linux-a的数据的计算机,以及需要接收备份linux-b的计算机。
在linux-a上,让netcat监听端口(我花了2000)并将其重定向到文件。它只会坐在那里,等到该端口上有东西通过。
[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz
在linux-b上,打开到linux-a的ssh隧道,我再次使用端口2000。这会将您在localhost的TCP端口2000上抛出的所有内容重定向到netcat正在侦听的linux-a上的TCP端口2000。
[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b
现在创建tar归档文件,但是将输出发送到stdout(使用-)并将其通过管道传输到gzip进行压缩。现在,将其通过管道传送到另一个netcat,并将其发送到端口2000上TCP的localhost。
[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000
大功告成!在linux-b上,netcat不再侦听,并且创建了一个新文件。最好的部分是tar存档从未放在linux-a的硬盘上。
[kenny@linux-b /var/backups]$ file backup.tgz
backup.tgz: gzip compressed data, from Unix, last modified: Thu Jul 5 13:48:03 2012
我知道这不是您在问题中所要的,但是如果您有可用的netcat,则它是解决问题类型的可行解决方案。
编辑:我忘记了一件事:如果遵循这些说明,您仍将在linux-a上浮动SSH隧道。找出进程ID是什么并将其杀死。
[kenny@linux-a /var/data]$ ps -ef | grep "ssh -L"
kenny 5741 1 0 13:40 ? 00:00:00 ssh -L 2000:localhost:2000 -CfN linux-b
kenny 5940 3360 0 14:13 pts/1 00:00:00 grep --color=auto ssh -L
[kenny@linux-a /var/data]$ kill 5741