3つのLinuxサーバーがあります。
1。データベースサーバー10.10.10.10
2。アプリケーションサーバー10.10.10.52
3。バックアップサーバー10.10.10.55
データベースサーバーとアプリケーションサーバーの間に直接接続があり、アプリケーションサーバーとバックアップサーバーの間に直接接続がありますが、データベースサーバーとバックアップサーバーの間に接続はありません。
データベースサーバーにバックアップサーバーにコピーしたいファイルがありますが、方法がわかりません。
誰かが何か考えがあれば、私とそれを共有してください。
前もって感謝します。
次のように、(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からログアウトすると、トンネルは閉じられます。
前提: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
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設定がセットアップされると、リモートサーバーに直接接続しているかのように、シームレスにファイルをコピーできます。