web-dev-qa-db-ja.com

中間サーバーを利用して、サーバー間でファイルをコピーするにはどうすればよいですか?

3つのLinuxサーバーがあります。
1。データベースサーバー10.10.10.10
2。アプリケーションサーバー10.10.10.52
3。バックアップサーバー10.10.10.55

データベースサーバーとアプリケーションサーバーの間に直接接続があり、アプリケーションサーバーとバックアップサーバーの間に直接接続がありますが、データベースサーバーとバックアップサーバーの間に接続はありません。
データベースサーバーにバックアップサーバーにコピーしたいファイルがありますが、方法がわかりません。
誰かが何か考えがあれば、私とそれを共有してください。
前もって感謝します。

4

次のように、(1)だけが(2)にアクセスできるため、SSHを使用してHost2(2)にログインするHost1(1)からHost(3)へのトンネルを作成する必要があります。

Host1$ ssh -L 9999:Host3:22 user@Host2

これにより、Host3へのトンネルが作成されます。ローカルホストのSSHポート(22)、ポート9999/TCP

次に、別のウィンドウで、次のようにHost 3にユーザーが存在するHost1からscpします。

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

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

5
Rui F Ribeiro

前提:Host A 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
2
Michael Felt

Rui F Ribeiroによって提案されたソリューション の代わりに、SSH構成ファイルにProxyCommandを設定します(通常は~/.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設定がセットアップされると、リモートサーバーに直接接続しているかのように、シームレスにファイルをコピーできます。

1
Arcturus B