linux – 私の(3台目の)PCから2台のリモートホスト間でscp

linux networking scp shell ssh

host1-> 10.3.0.0.1 host2-> 10.3.0.0.2 両方とも ssh サーバを実行しています

ssh サーバは、host1 のポート 22 と host2 のポート 6969 で待機しています。さて、私のローカルマシンを使って、ssh 経由で host1 または host2 にログインせずに host1 から host2 に何かをコピーする必要があります。以下のようなものです

scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file

どうすればいいのでしょうか、2つのホストでは ssh のために異なるポートを使用していることに注意してください

  164  uwais ibrahim  2013-12-10


ベストアンサー

過去には、リモートシステム間でファイルをコピーするために(素朴に)呼び出されたときに、scpが動作する方法は非常に不便でした

    scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

scp は最初に remote1 で ssh セッションを開き、そこから remote2 に scp を実行します。これを動作させるためには、remote1 上で remote2 の認証資格情報を設定しなければなりません

代わりに、現代的な方法 (「現代的」というのは、実装されたのがほんの数年前で、おそらく誰もが -3 対応の scp を持っているわけではないからです) では、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でポート2222を使用すると言っていた場合、リモート1を参照しているのかリモート2を参照しているのか、暗号鍵を含むファイルについても同様に不明瞭になっていたでしょう。このようにして、CLI は整然としたシンプルなものになります

次に、以下のように-3オプションを使用します

    scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

-3オプションは、転送のサードパーティであるにもかかわらず、コマンドが発行されたPCを経由してトラフィックをルーティングするようにscpに指示します。この方法では、認証資格情報はサードパーティである発行PCにのみ存在しなければなりません

257  MariusMatutiae  2013-12-10


ソースとターゲットは URI として scp://[user@]host[:port][/path] の形式で指定することができます

走れるように

scp -3 scp://user@10.3.0.1:22/path/to/file scp://user@10.3.0.2:6969/path/to/file

11  molabib  2018-12-03


前回試した時は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"

7  peterh – Reinstate Monica  2013-12-10


私の場合は、-3引数を使わずにリモートからリモートへのコピーを行っていました。P’ パラメータで指定したポートは 1 台目のサーバでは動作しますが、2 台目のサーバでは 22 番ポートが使用されています

ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com

解決策は、server1/etc/ssh/ssh_configファイルを編集して、これらの行を追加することです

Host *.otherdomain.com
Port  1234

このように、どちらもポート1234を使用しています。これも違う可能性があります

このソリューションは、コミュニテーションがダイレクトであるため、従来のソリューションよりもスループットが向上しています

5  david.perez  2016-01-26


タイトルとURLをコピーしました