![中間サーバーを使用してあるサーバーから別のサーバーにファイルをコピーする方法は? [コピー]](https://linux33.com/image/99598/%E4%B8%AD%E9%96%93%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%82%E3%82%8B%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8B%E3%82%89%E5%88%A5%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私は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構成を設定したら、リモートサーバーに直接接続するのと同じようにファイルをシームレスにコピーできます。