ホスト B をパッシブな中間ストレージ領域として使用して、ホスト A からホスト C にファイルを移動するための優れた既存のソリューションはありますか。
A -> B -> C
制限事項
- ホスト A とホスト C は別のネットワーク上にあり、相互にアクセスできません。A と C の間にトンネルを開くことはできません。
- ホスト A とホスト C はどちらも定期的なプロセスを実行およびスケジュールできます。
- ホスト B はストレージ領域のみを提供し、SSH 経由でホスト A とホスト C の両方からアクセスできます。
- B は「パッシブ」となり、ストレージ領域のみを提供します。
- したがって、A は (B 上のファイルの) ライターとして機能し、C は (B 上のファイルの) リーダーとして機能します。
- ホスト A からホスト C (B 経由) に正常にコピーされたファイルは、ホスト A で削除できます。
- ファイルがホスト C に正常に送信されたことが保証されるまで (ファイルのチェックサムを含む受領書など)、ホスト A 上のファイルは削除されません。
- コーナーケースには、ネットワークのダウンタイム、ディスクの空き容量不足、中断されたプロセスなどの管理が含まれます。
目的は、B を中間ストレージ領域として使用して、定期的にファイルを A から C に移動することです。
すべてのホストが Unix/Linux を実行していると想定できます。推奨ツール: ssh/rsync/bash + その他の「標準」ツール。
私は、rsync に関するいくつかの bash スクリプトを 2 段階で使用し、チェックサムを含むレシートを使用してファイルが正常に移動されたかどうかを検出するソリューションを作成することを考えていました。
既存の解決策はありますか?
答え1
B に何かを保存する必要はないと思います。SSH ポート転送や SOCKS などのプロキシ ソフトウェアを使用して、A と C 間の接続をプロキシするだけで済みます。B 経由でルーティング/NAT を行うこともできますか?
あるいは、あなたが具体的に尋ねたように、あなたのやり方でそれを行うには、NFS/Samba を使用してファイルをコピーし、さまざまな方法で完了を確認することができます。思いつくのは、共有にファイルを作成し、両方のシステム間で「コピー完了」または「削除可能」タイプのメッセージを渡すことです。または、あなたが言ったように、MD5 などを使用する方法もあります... どのように行うにせよ、それはカスタム ジョブになることは間違いありません。しかし、難しいものではありません。その方法であなたの問題に対処する既存の方法があるとは思えません。
答え2
あなたの質問に対するスヴェンのコメントは間違いなく正しいやり方です。
次のように実行できます:
A
SSHからB
ポート5000にトンネルを作成するssh someuser@B -L 5000:127.0.0.1:5000
上のそのシェルから
B
、 に SSH 接続して、 の SSH サーバーC
で終了する 2 番目のトンネルを作成します。C
ssh someuser@C -NL 5000:127.0.0.1:22
の2番目のターミナルから
A
、ファイルを直接rsyncします。C
rsync -avz -e "ssh -p 5000" --progress --remove-source-files /source/directory [email protected]:/destination/directory
手順 1 と 2 のトンネルを 1 つのコマンドで設定できる可能性もありますが、私が行った簡単なテストではできませんでした。 および に ssh キーを設定する必要があるかもしれませB
んC
。
コピープロセスを自動化する場合は、次のようなものを検討する必要があるかもしれません。オートサービス経由でトンネルの設定と解除を行います。または、cron 経由で行うこともできます。