リモートホストが2つあります。
Host1 - > 10.3.0.1
Host 2 - > 10.3.0.2
どちらもsshサーバーを実行しています。
Sshサーバーは、Host1のポート22とHost2のポート6969でlistenします。さて、私のローカルマシンを使って、sshを使ってHost1とHost2のどちらにもログインせずにHost1からHost2に何かをコピーする必要があります。何かのようなもの、
scp [email protected]:/path/to/file [email protected]/path/to/file
これをどのように行うことができますか?2つのホストがsshに異なるポートを使用することに注意してください。
以前は、リモートシステム間でファイルをコピーするために(naively)を呼び出したときにscp
がどのように機能するかは非常に不便でした。
scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
scp
は、まずremote1でssh
セッションを開き、次にそこからremote2に対してscp
を実行します。これが機能するためには、remote1にremote2の認証資格情報を設定する必要があります。
代わりにそれを行うための現代的な方法(それがほんの数年前に実装され、おそらく誰もが-3
-enabled scp
を持っているわけではないので "modern")には2つのステップが必要です。次のように、最初に必要な手順は~/.ssh/config
を使用してremote1とremote2の両方に接続するためのすべてのオプションを設定することです。
Host remote1.example.org
Port 2222
IdentityFile /path/to/Host1-id_rsa
Host remote2.example.org
Port 6969
IdentityFile /path/to/Host2-id_rsa
こうすることで、必要なすべてのオプションをあいまいさなしにに渡すことが可能になります。たとえば、上記の設定なしでCLI se port 2222を使用した場合、それは不明です。 remote1またはremote2を参照していましたが、同様に暗号化キーを含むファイルも参照していました。こうすればCLIはきちんとした、簡単に残る。
次に、以下のように-3
オプションを使用します。
scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
-3
オプションは、たとえ転送の第三者であっても、コマンドが発行されたPCを介してトラフィックをルーティングするようにscp
に指示します。この方法では、認証資格情報は発行元のPC、サードパーティにのみ存在する必要があります。
前回これを試したとき、scpはそれを実行できませんでした。あなたのコマンドラインは大丈夫に見えます。この回避策は機能します。
ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"
私の場合、-3
引数なしで、リモートからリモートへのコピーをしていました。 '-P'パラメータで与えられたポートは1台目のサーバで動作しますが、22番ポートは2台目のサーバで使用されます。
ssh -P 1234 [email protected] [email protected]
解決策は/etc/ssh/ssh_config
のserver1
ファイルを編集して以下の行を追加することです。
Host *.otherdomain.com
Port 1234
このように、ポート1234は両方に使用されます。それも違うかもしれません。
コミュニケーションは直接的なので、このソリューションのスループットは以前のソリューションよりも優れています。
ソースとターゲットは、scp:// [user @] Host [:port] [/ path]の形式でURIとして指定できます。
だから実行することができます:
scp -3 scp://[email protected]:22/path/to/file scp://[email protected]:6969/path/to/file