2つの異なるVPN接続でアクセスできる2つのサーバーがあります。私は自分のマシンで両方のVPNを同時に動作させることができました(少しのルーティングルール)。
やりたいscp <remote1>:some/file <remote2>:destination/folder
私のラップトップ端末から。しかし、これを試してみると、remote1で呼び出されたscp
コマンドは、同じネットワーク内にないため、remote2を見つけることができません。 scp
コマンドを強制的に私のラップトップをルーターとして通過させることは可能ですか?
Nautilus(サーバーに接続し、両方のサーバーに接続してからコピーアンドペースト)を試してみれば機能しますが、ターミナルから実行したいと思います。
Scpの新しいバージョンには、オプション-3があります。
-3
Copies between two remote hosts are transferred through the local Host. Without this option the data is copied directly between the two remote hosts
scp -3
よりも柔軟性が必要な場合は、単純なssh
とパイプが楽しいです。
これは、ローカルマシンを介してストリームをリダイレクトするのと同じです。
ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'
その後、任意の時点でストリームリダイレクトを追加できます。複数の中間マシンをチェーンするか、転送されるファイルのルーティング時にローカルコピーを保存します。
@Ankoの答えを拡張すると、複数のファイルに対してtar
を使用できます。
ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'
圧縮は完全にオプションです。データはあまり圧縮できないか、オーバーヘッドを保証するほど大きくない場合があります。 tar
のバージョンが-z
スイッチをサポートしていない場合は、それぞれgzip -c
とgzip -dc
を介してパイプ処理します。
PS:抽出時に先頭のスラッシュを削除しないtar
のバージョンに注意してください(つまり、指定されている場合は絶対パス名に書き込みます)。
編集:疑似端末が割り当てられていないため、-e none
はパイプでは必要ありません。