同じネットワークに接続されていない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
それはおそらく、1台目のコンピュータが2台目のコンピュータを認識できないためだと思います。 SCPプログラムを実行するマシンが両方のコンピューターを表示できる唯一のマシンであるという事実を扱うパラメーターをSCPに与えることは可能ですか?
ちなみに、3台目のコンピューターはLionを搭載したMacで、1台目と2台目はDebianを実行しています。
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つを共通のポート番号でリンクする必要があります。
Scpオプション-3を探しているはずです。あなたの例にそれを置くために:
scp -3 root@firstcomputer:./file root@secondcomputer:./
-3オプションは、2011年初めにリリースされたOpenSSH5.7で最初に導入されたことに注意してください。
あなたはこれを試すことができます:
root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file
これにより、ファイルが3番目のコンピューターの/ tmpディレクトリーにコピーされ、成功した場合は、そのファイルが2次コンピューターに再コピーされてから、それ自体がクリーンアップされます。 &&演算子を使用しているため、各コマンドは前のコマンドが成功した場合にのみ実行されます。