Bash

在防火牆後面時,如何使用從遠端伺服器通過管道傳輸到 SSH 的 tar 在兩個遠端主機之間進行複制?

  • May 12, 2017

我想在兩台伺服器之間傳輸一個目錄,但在傳輸之前先壓縮遠端主機上的目錄,然後解壓縮到另一台主機。我敢肯定,可以將所有東西一直通過管道並在一個襯里中完成。

我意識到如果我可以直接在主機之間傳輸當然會更好,但這將涉及傳輸密鑰等等,我喜歡 Unix 單線電動工具。我相信人們可以想出幾種不同的方法來做到這一點。我正在尋找最短的語法和最保守的頻寬。

首先我有

ssh -n REMOTEHOST 'tar zcvf - DIRTOCOPY' | localZip.tar.gz 

類似於jw013在評論中建議的內容,具有單獨的壓縮/解壓縮步驟,即將兩個 ssh 命令與管道組合:

compress=gzip
decompress=gunzip

ssh remote1 "cd srcdir; tar cf - dir | $compress" |
ssh remote2 "cd destdir; $decompress | tar xvf -"

請注意,壓縮/解壓縮是可配置的,而不取決於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

引用自:https://unix.stackexchange.com/questions/45624