2つのリモートSSHサーバー間でファイルを転送する


21

2つのSSH / SFTPサーバー間でファイルを転送する簡単な方法はありますか?完璧なソリューションはFileZillaですが、ローカルとリモート間の接続のみを作成でき、リモートとリモート間の接続は作成できません。

理論的には私は2つのNautilusウィンドウを開いて、いくつかに接続することができましたssh://server1/path/to/folderし、ssh://server2/path/to/folderその後、ちょうど反対側に1からファイルを引っ張ります。私の経験では、これは非常に不安定です。つまり、合計サイズが10MBのファイルを送信しても問題はありませんが、10GBを転送すると、Nautilusがハングアップして、必要なままになりますps -e | grep nautilus-> kill -9 <pid>。NemoとCajaでも同じことをテストしました。Nemoは他の2つよりも安定している傾向がありますが、まだ完全ではなく、時々壊れます。FileZillaは非常に安定しており、実際に壊れることはありませんが、単一のSSHサーバーにしか接続できないという前述の事実のため、あまり柔軟ではありません。

もちろん、でフォルダをマウントすることもできますがsshfs、これは一種の不便な解決策です。単純な転送を実行するために行う前作業が多すぎます。

2つのSSHサーバー間の転送を中断せずに処理できるアプリはありますか?完璧なのはFileZillaのようなもので、接続が中断された場合に再びジョブを取得します。


これはソフトウェアの推奨サイトではないため、答えではありませんが、私は長年にわたって(商用)Beyond Compare(scootersoftware.com)を使用しており、この種のタスクには最適です。2つのウィンドウがあり、どちらもローカルパスまたはsftp:// URLを表示でき、フォルダー間の違いを表示します。違いをコピーするだけで、壊れた場合に優れた再開メカニズムを実現します。私の経験では。(満足した顧客である場合を除き、彼らと提携していません)。
Guntram Blohmはモニカを

回答:


36

まだサポートされているUbuntuバージョンを使用している場合、scpコマンドはlocalhostを介してremote1-3からremote2にファイルをコピーできるスイッチを提供します。

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

-3スイッチを省略することもできますが、次のファイルに公開鍵(id_rsa.pub)が必要user1@remote1になります。authorized_keysuser2@remote2

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

scpその後、ボンネットの下でssh user1@remote1最初に、そこから scp /path/to/file1 user2@remote2:/path/to/file2。そのため、資格情報を-3ソリューションとは異なる方法で配布する必要があります。

言い換えると:

  • scp -3 remote1:file1 remote2:file2ファイルをremote1からlocalhostに転送してから、 remote2戻します。データはremote1→localhost→remote2に移動します。したがって、localhostはこのシナリオのサードパーティ-3です。このために仕事に、あなたはからの資格情報が必要になりますローカルホスト の両方でREMOTE1REMOTE2ので、localhostのそれらの両方に接続します。

  • scp remote1:file1 remote2:file2ファイルをremote1からremote2に、互いに接続されている速度で直接コピーします 。ここではlocalhostは関係ありません(コマンドの発行以外)。データはremote1→remote2に移動します。このために仕事に、あなたはからの資格情報が必要になりますローカルホストを のみにREMOTE1 が、さらにあなたは、資格情報の必要REMOTE1REMOTE2をので、ローカルホストに接続REMOTE1は 唯一、その後、REMOTE1に接続REMOTE2

可能であれば、2番目のアプローチを選択します。すでにいくつかのコメントが言っているように、通常remote1remote2の間のネットワークケーブルは、それらとlocalhostの間のケーブルよりもはるかに太いことがよくあります。


2
それはただ美しいです。sshは、ソフトウェアのスイスアーミーナイフです。おかげで、私は何かを学びました。
オーガニックマーブル

4
このアプローチは、質問で説明したnautilusアプローチと同様に、最初にローカルマシンにファイルを転送し、次に2番目のサーバーに転送することに注意してください。これにより、2台のリモートサーバーがローカルマシンよりも高速なリンクを持っている場合、大幅な速度低下が発生します。(たとえば、リモートサーバーがデータセンターにあり、ローカルマシンにDSL接続がある場合。)
Stobor

1
@Stobor良い点、ありがとう。データがある場合とない場合の動きを少し明確にするために答えを更新しました-3
PerlDuck

1
2番目の方法は、remote1にキーやパスワードを持たずに、エージェント転送で機能しますか?
エリックドゥミニル

1
@EricDuminilわからない 私は、エージェントフォワーディングに真の経験はありません。しかし、キーもパスワードも指定されていない場合、remote1はアクセスを拒否することになっているので、私はそれを疑います。
PerlDuck

10

ほとんどの場合、2台のsshサーバーが互いに到達できます(または少なくとも1台が他方に到達できます)。また、ほとんどの場合、ワークステーションのインターネットはどちらのサーバーよりもはるかに劣っています。

その場合、1つのサーバーを他のサーバーに転送するように注文するのが方法です。

ssh server1 nohup scp somefile server2:somefile

nohup.outserver1でエラーを確認します。

サーバーの到達可能性が別の方法である場合、どのマシンがマスターであるかを逆にすることができます。

ssh server2 nohup scp server1:somefile somefile

7

おそらく、いくつかのGUIフロントエンドの1つを使用してrsyncを実行できます。

コマンドrsyncのGUIアプリケーションはありますか?

または、コマンドラインからrsyncを直接使用して、両方のリモートサーバーに接続することもできます。

「2つのリモート間でファイルをrsyncする方法」

私はよくsshで1つのサーバーにログインし、そのサーバーのコマンドラインからrsyncを使用して他のリモートサーバーにファイルをプッシュまたはプルします。これは一般に、3番目のコンピューターを介してファイルを転送するよりもはるかに高速です。

rsyncはある程度の作業を行うのに十分スマートであり、何か問題が発生してプロセスを中断した場合、中断したところから後で再開できます。


0

SCPプロトコルを使用する必要があります。 scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save


2
OPは、ローカルコンピューターからリモートコンピューターにではなく、2つのリモートコンピューター間でファイルをコピーしたいと考えています。彼はまた、GUIソリューションを探しているようです。
user68186

@ user68186私の答えは有効です。
グレイブマインド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.