web-dev-qa-db-ja.com

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

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

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

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

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

21
Socrates

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

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

-3スイッチを省略することもできますが、その場合、id_rsa.pub of user1@remote1authorized_keysの公開鍵(user2@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です。これを機能させるには、localhostが両方に接続されているため、remote1remote2の両方でlocalhostからの認証情報が必要です。そのうちの。

  • scp remote1:file1 remote2:file2は、相互に接続されている速度でremote1からremote2に直接ファイルをコピーします。 localhostはここには含まれていません(コマンドの発行以外)。データはremote1→remote2を移動します。これが機能するためには、localhostからの資格情報remote1butのみが必要です。 remote1の資格情報が必要remote2localhostremote1に接続し、次にremote1に接続するため= remote2に接続します。

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

36
PerlDuck

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

その場合は、一方のサーバーを他方のサーバーに転送するように注文するのがよいでしょう。

ssh server1 Nohup scp somefile server2:somefile

小切手 Nohup.out server1でエラーが発生しました。

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

ssh server2 Nohup scp server1:somefile somefile
10
Joshua

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

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

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

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

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

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

7
David Cary

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

0
Gravemind