Bash
在防火牆後面時,如何使用從遠端伺服器通過管道傳輸到 SSH 的 tar 在兩個遠端主機之間進行複制?
我想在兩台伺服器之間傳輸一個目錄,但在傳輸之前先壓縮遠端主機上的目錄,然後解壓縮到另一台主機。我敢肯定,可以將所有東西一直通過管道並在一個襯里中完成。
我意識到如果我可以直接在主機之間傳輸當然會更好,但這將涉及傳輸密鑰等等,我喜歡 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