(3番目の)pcからの2つのリモートホスト間のscp


136

2つのリモートホストがあります。
host1-> 10.3.0.1
host2-> 10.3.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に異なるポートを使用することに注意してください。


リモートホストからリモートホストに転送できるかどうかを尋ねていますか、それともパスワードを入力せずに転送する方法を求めていますか?
グレンジャックマン

ながら-Pフラグ...、リモートツーリモート転送の場合には、ホストごとのポートを指定する方法には定義された行動としてSSHを使用するポートを指定するために存在する
mveroone

回答:


216

以前は、scp単純に)リモートシステム間でファイルをコピーするために呼び出されたときの動作方法は非常に不便でした。たとえば、

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

scp最初sshにremote1でセッションを開き、次にscpそこからremote2に実行します。これが機能するには、remote1のremote2の認証情報を設定する必要があります。

代わりに、それを行う最新の方法(「モダン」は数年前に実装されただけで、おそらく誰もが-3-capableを持っているわけではない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を使用して上記の構成せずに、我々が参照したかどうかは不明であったであろうREMOTE1またはしREMOTE2、および暗号化キーを含むファイルについても同様です。このようにして、CLIは整然としたシンプルなままです。

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

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

-3オプションは、指示scpコマンドは、それが転送にサードパーティ製であっても、発行されているPC経由でトラフィックをルーティングします。この方法では、認証資格情報は発行元のPC、つまりサードパーティにのみ存在する必要があります。


6
将来の参照用:IDファイル(EC2インスタンスなど)を共有する2つのホスト間でファイルをコピーする場合、構成ファイルは必要ありません。両方のホストに接続するには、1つの-i引数で十分です。
アルトゥールツァイカ14

1
また、そこにあなたに追加するためのサポートがあり、GoogleのCompute Engineのために、注目に値する~/.ssh/configファイル:cloud.google.com/compute/docs/gcloud-computeは、しかし、私はAWSは同じサポートを持っているとは思わない
modulitos

1
通常のように出力が表示されないため、ヒントはで詳細モードを有効にすることです-v
ホルンバード

6

前回これを試したとき、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"

scpのマニュアルページには、「2つのリモートホスト間のコピーも許可されています」と記載されています。
グレンジャックマン

1
ありがとう、聞いてよかった。scpには、-Pフラグを付けることができます(これは、一部のBSDの人々によって書かれました。これは、引数の取り扱いが非常に悲惨だからです:-()が、リモートホストで別のポートを指定できないようです。私はポートの設定で私の回避策を拡張。 -しかし私は、これだけ回避策はレフト(例えば、sftpfsが、彼らは最も単純ではありませんかトリッキーソリューションがたくさんある、sshを使ったが、SCPを避けること)だと思う。
user259412

4

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

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

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

Host *.otherdomain.com
   Port  1234

このようにして、ポート1234が両方に使用されます。それも違うかもしれません。

通信は直接であるため、このソリューションのスループットは以前のソリューションよりも優れています。


perezコマンドラインからの2つの異なるリモートマシンの2つの異なるポートを介してscpを達成する方法はありますか?
赤いボトル

4

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

以下を実行できます:

scp -3 scp://user@10.3.0.1:22/path/to/file scp://user@10.3.0.2:6969/path/to/file
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.