在防火墙后面时,如何使用从远程服务器通过管道传输到 SSH 的 tar 在两个远程主机之间进行复制?

bar*_*mac 5 bash ssh tar backup

我想在两台服务器之间传输一个目录,但在传输之前压缩远程主机上的目录,然后解压缩到另一台主机。我确信有可能将所有东西都通过管道输送并在一个衬里中完成。

我意识到如果我可以直接在主机之间传输当然会更好,但这会涉及传输密钥等等,而且我喜欢 Unix 单线电源工具。我相信人们可以想出几种不同的方法来做到这一点。我正在寻找最短的语法和最保守的带宽。

首先我有

ssh -n REMOTEHOST 'tar zcvf - DIRTOCOPY' | localZip.tar.gz 
Run Code Online (Sandbox Code Playgroud)

Tho*_*hor 8

类似于jw013在评论中建议的具有单独压缩/解压缩步骤的内容,即将两个 ssh 命令与管道组合:

compress=gzip
decompress=gunzip

ssh remote1 "cd srcdir; tar cf - dir | $compress" |
ssh remote2 "cd destdir; $decompress | tar xvf -"
Run Code Online (Sandbox Code Playgroud)

请注意,压缩/解压缩是可配置的,而不依赖于tar.

更新

您还可以将校验和验证添加到管道中:

compress=gzip
decompress=gunzip

ckprg=md5sum
cksum=/tmp/cksum

ssh remote1 "cd srcdir; tar cf - dir | $compress | tee <($ckprg > $cksum)" |
ssh remote2 "cd destdir; tee <($ckprg > $cksum) | $decompress | tar xvf -"

ssh remote1 cat $cksum
ssh remote2 cat $cksum
Run Code Online (Sandbox Code Playgroud)