中間サーバーを使用してあるサーバーから別のサーバーにファイルをコピーする方法は? [コピー]

中間サーバーを使用してあるサーバーから別のサーバーにファイルをコピーする方法は? [コピー]

私は3つのLinuxサーバーを持っています:
1.データベースサーバー10.10.10.10
2.アプリケーションサーバー10.10.10.52
3.バックアップサーバー10.10.10.55

データベースとアプリケーションサーバーの間には直接接続があり、アプリケーションとバックアップサーバーの間には直接接続がありますが、データベースとバックアップサーバーの間には接続はありません。
データベースサーバーにファイルがあり、バックアップサーバーにコピーしたいのですが、どうすればいいのかわかりません。
誰でもアイデアがあれば私と共有してください。
よろしくお願いします。

答え1

次のように(1)のみ(2)にアクセスできるため、SSHを使用してホスト2(2)にログインして、ホスト1(1)からホスト(3)までトンネルを確立する必要があります。

host1$ ssh -L 9999:host3:22 user@host2

これにより、ホスト3、localhostのSSHポート(22)、およびポート9999 / TCPのトンネルが作成されます。

次に、別のウィンドウで、次のようにホスト3のユーザーと一緒にホスト1でscpします。

host1$ scp -P 9999 file_to_copy user@localhost:/user/file_to_copy

これに関して、ファイル転送はホスト1からホスト3に直接行われるが、ホスト2は単にSSHトンネルを介して接続を転送する。最初のSSHからログアウトすると、トンネルが閉じます。

答え2

仮定: HostA の scp /tmp/xxx HostB:/tmp/xxx および HostB の scp /tmp/xxx HostC:/tmp/xxx

場合によっては、伝統的にssh / scpトンネルを使用してHostAからHostCにコピーします。ネットワークもトンネリングが無効になっていると仮定します(「直接接続」についても質問したとします)。

次のスクリプトを作成できます。 HostBで実行してください。

#!/usr/bin/bash -e
# assumes you have PKI setup so you only have to enter your pass-phrase at most once
file=$1

scp Hosta:$file $file
scp $file HostC:$file
rm $file

考えた後:HostBで

scp HostA:$file HostC:$file

答え3

の代替Rui F Ribeiroが提案したソリューションProxyCommandSSH設定ファイル(通常は~/.ssh/config)に設定されます。

host <remote>
    ProxyCommand ssh <gateway_user>@<gateway> nc <host> 22
    User <host_user>

その後、単に以下を使用できます。

scp /local/path/to/file <remote>:/remote/path/to/file
scp <remote>:/remote/path/to/file /local/path/to/file

SSH構成を設定したら、リモートサーバーに直接接続するのと同じようにファイルをシームレスにコピーできます。

関連情報