rsync 獨特情況
參考:
http://ubuntuforums.org/showthread.php?t=748431
我有一種情況,我真的希望有一個解決方案,儘管在過去的幾個小時裡我還沒有找到任何東西。
我有兩台無法相互通信的伺服器,我需要在它們之間傳輸數據。這是一種相當常見的情況,可以通過一些 scp 詭計輕鬆克服。這是問題所在。
一台伺服器通過 VPN 訪問,
vpnserver
另一台伺服器targetserver
通過跳轉主機訪問jumphostserver
。我已經
ProxyCommand
設置允許我通過 to 代理連接jumphostserver
,targetserver
並且我正在使用 SSH Mux 的東西(ControlMaster
//ControlPersist
)ControlPath
來允許所有打開的連接的連接共享。我的本地機器可以使用以下命令在兩台伺服器之間正確地 scp 東西:
scp -3 vpnserver:/path/to/file targetserver:/path/to/destination
我還可以將內容直接從
vpnserver
本地電腦和本地電腦同步到targetserver
(使用通過的 ssh 代理jumphostserver
)我需要做的是讓我的機器以允許它的方式充當中介,
scp -3
但使用.rsync``targetserver
我曾想過嘗試 NFS 導出
vpnserver
and的文件系統targetserver
(通過 重新導出jumphostserver
),但我無法控制jumphostserver
,只能控制vpnserver
andtargetserver
。
如果存在網路連接,則這兩個主機中的一個可以登錄到另一個,或者在另一台上的 authorized_keys 中使用 SSH ID 密鑰,或者可以使用密碼,並且如果未禁用埠轉發,並且如果通過您的本地電腦執行此流量是可以的,那麼這幾乎總是可以通過埠轉發來完成。
讓我們稱您的本地電腦為主機 A,並且該主機 B 具有使用 SSH 登錄主機 C 的憑據,前提是它可以到達主機 C。
- 使用選項登錄到主機 B,執行反向埠轉發,偵聽機器 B 上的埠 2222 並連接到本地主機上的埠 3333(這將發生在機器 A 上)。在 Linux 上,此選項為“ -R 2222:localhost:3333 ”。
- 使用普通埠轉發登錄主機 C,偵聽機器 A 上的埠 3333 並連接 localhost 上的 tp 埠 22(這將在機器 C 上發生)。在 Linux 上,此選項為“ -L 3333:localhost:22 ”。
- 在主機 B 上啟動與主機 C 的測試 SSH 會話,以查看是否一切設置正確。要執行的命令是“ ssh -p2222 usernameonhostc@localhost ”。如果一切設置正確,它將連接到 B 的 2222 埠,轉發到 A 的 3333 埠,然後轉發到 C 的 22 埠。如果您的密鑰正確,您就可以登錄。否則你應該得到一個密碼提示。輸入密碼以確保。
如果您可以正常連接,請關閉該測試連接,然後繼續執行下面的 #4 或 #5。
- 要將文件從 B 發送到 C,請在 B 上執行以下操作: rsync -e “ssh -p2222” -av /where/to/get/files/。usernameonhostc@localhost:/where/to/put/files
- 要將文件從 C 發送到 B,請在 B 上執行以下操作:rsync -e " ssh -p2222" -av usernameonhostc@localhost:/where/to/get/files/。/where/to/put/files
如果由於本地訪問的頻寬有限,需要通過網際網路在機器之間傳輸大量數據,那麼它會更加複雜,需要知道網路如何限制在 B 和 C 上,甚至可能都不可能。
用您在主機 C 上使用的使用者名替換字元串“useronhostc”。保持“localhost”不變或僅將其更改為“127.0.0.1”。為所示範例提供正確的路徑。如果它只是一個文件,請刪除源路徑末尾的“ /. ”。
請記住,您必須同時登錄 B 和 C(從 A)。建議使用單獨的 xterminal 視窗。這些 ssh 登錄都將進行埠轉發。但是您也可以通過它們執行命令。您可以選擇不同於範例中所示的 2222 或 333 的埠號。埠 22 可能是必需的,除非主機 C 出於某種原因在不同的埠上偵聽(我用我的伺服器這樣做……我不告訴什麼埠)。如果您更改埠 2222 和/或 3333,您可能必須使用 1024 或更高的數字。從技術上講,您甚至可以對兩者使用相同的數字,因為監聽器在不同的機器上。