使用中間儲存區域在主機之間移動檔案

使用中間儲存區域在主機之間移動檔案

是否有任何好的現有解決方案可以使用主機 B 作為被動中間儲存區域,將檔案從主機 A 移至主機 C。

A -> B -> C

限制

  • 主機A和主機C處於不同的網絡,不能互相存取。 A 和 C 之間不能開通隧道。
  • 主機 A 和主機 C 都可以運作和調度週期性進程。
  • 主機B只提供一個儲存區域,主機A和主機C都可以透過SSH存取。
  • B將是「被動的」並且僅提供儲存區域。
  • 因此,A 將充當(B 上檔案的)寫入者,C 將充當(B 上檔案的)讀取者。
  • 然後可以在主機 A 上刪除從主機 A 成功複製到主機 C(透過 B)的檔案。
  • 在保證(包含檔案校驗和的收據?)主機 A 上的檔案已成功登陸主機 C 之前,不應刪除主機 A 上的任何檔案。
  • 極端情況包括管理網路停機、磁碟已滿、進程中斷等

目的是定期將檔案從 A 移動到 C,並使用 B 作為中間儲存區域。

我們可以假設所有主機都執行 Unix/Linux。首選工具:ssh/rsync/bash +其他「標準」工具。

我正在考慮透過分兩步驟使用一些圍繞 rsync 的 bash 腳本來創建解決方案,並使用包含校驗和的收據來檢測檔案何時成功移動。

有現成的解決方案嗎?

答案1

我認為沒有必要在 B 上儲存任何內容,您只需使用它來使用任何代理軟體(例如 ssh 連接埠轉發或襪子)代理 A 和 C 之間的連接。也許你甚至可以透過 B 路由/nat?

或者,既然您特別要求,按照您的方式操作,您可以使用 NFS/Samba 複製檔案並使用各種方法驗證完成情況。我想到的是在共享上創建一個文件,以便在兩個系統之間傳遞“複製完成”或“可以刪除”類型的消息。或者就像你說的,MD5 等的東西......無論你怎麼做,我很確定這將是一個自訂工作。但這並不是一件困難的事。我懷疑是否有任何現有方法可以以這種方式處理您的問題。

答案2

斯文對你的問題的評論絕對是正確的做法。

你可以這樣做:

  1. ASSH 到B,在連接埠 5000 上建立隧道

    ssh someuser@B -L 5000:127.0.0.1:5000
    
  2. 從該 shell 開始B,透過 SSHC建立第二個隧道,終止於C的 ssh 伺服器。

    ssh someuser@C -NL 5000:127.0.0.1:22
    
  3. 從第二個終端機上A,將檔案直接同步到C

    rsync -avz -e "ssh -p 5000" --progress --remove-source-files /source/directory [email protected]:/destination/directory
    

甚至可以使用一個命令在步驟 1 和 2 中設定隧道,但在我所做的快速測試中,我無法做到。它可能需要在B和上設定 ssh 密鑰C

如果您要自動化複製流程,那麼您可能需要查看類似的內容自動SSH透過服務為您設定和拆除隧道。或者你可以透過 cron..

相關內容