私は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が提案したソリューションProxyCommand
SSH設定ファイル(通常は~/.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構成を設定したら、リモートサーバーに直接接続するのと同じようにファイルをシームレスにコピーできます。