同じネットワークに接続されていない 2 台のコンピュータ間でファイルを転送する必要があります。VPN 経由で両方のネットワークを認識できる 3 台目のコンピュータがあります。
3 台目のコンピューターからは、次の操作を実行できます。
scp root@firstcomputer:./file ./
そして、次の文で転送を終了します。
scp ./file root@secondcomputer:./
しかし、次のように 1 行だけで実行することはできません。
scp root@firstcomputer:./file root@secondcomputer:./
エラー応答は
ssh: connect to host secondcomputer port 22: No route to host
lost connection
おそらく、最初のコンピュータが 2 番目のコンピュータを認識できないためだと理解しています。SCP プログラムを実行するマシンだけが両方のコンピュータを認識できるという事実に対処するパラメータを SCP に与えることは可能ですか?
ちなみに、3 台目のコンピューターは Lion を搭載した Mac で、1 台目と 2 台目は Debian を実行しています。
答え1
SSH トンネルを使用できるはずです。
リモート コンピューター (「リモート」) からローカル コンピューター (「ローカル」) にファイルを転送しようとしていると仮定すると、ローカル コンピューターで次のように入力して、3 番目のコンピューター (「ゲートウェイ」) 経由でトンネルを確立します。
ssh -fNL 12345:remote:22 gatewaylogin@gateway
次に、このトンネルで SCP コマンドを無制限に実行できます (引き続きローカル コンピューターに入力します)。
scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file
これを自分のネットワークでテストしたところ、完璧に動作しました。
上記の方法は、リモート ネットワークが安全な場合は問題ありませんが、安全でない場合は、ローカルとゲートウェイの間にトンネルを確立し、ゲートウェイとリモートの間に別のトンネルを確立して、共通のポート番号で 2 つをリンクする必要があります。
答え2
scp オプション -3 が、あなたが探しているものであるはずです。例に当てはめると次のようになります。
scp -3 root@firstcomputer:./file root@secondcomputer:./
-3 オプションは、2011 年初頭にリリースされた OpenSSH 5.7 で初めて導入されたことに注意してください。
答え3
これを試すことができます:
root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file
これにより、ファイルが 3 番目のコンピューターの /tmp ディレクトリにコピーされ、成功した場合は、そのファイルが 2 番目のコンピューターに再コピーされて、クリーンアップされます。 && 演算子を使用しているため、各コマンドは、前のコマンドが成功した場合にのみ実行されます。