Transfer file antara dua server SSH jarak jauh

21

Apakah ada cara mudah untuk mentransfer file antara dua server SSH / SFTP? Solusi yang sempurna adalah FileZilla, tetapi hanya memungkinkan Anda membuat koneksi antara lokal dan jarak jauh, tetapi tidak antara jarak jauh dan jarak jauh.

Secara teoritis saya bisa membuka dua jendela Nautilus dan terhubung ke beberapa ssh://server1/path/to/folderdan ssh://server2/path/to/folderkemudian hanya menarik file dari satu ke sisi lain. Pengalaman saya adalah ini sangat tidak stabil. Mengirim file dalam jumlah ukuran yaitu 10MB tidak ada masalah, tetapi mentransfer yaitu 10GB sering mengakibatkan Nautilus menggantung diri dan tetap di sana membutuhkan ps -e | grep nautilus-> kill -9 <pid>. Saya juga menguji hal yang sama dengan Nemo dan Caja. Sementara Nemo cenderung lebih stabil daripada dua lainnya, itu masih tidak sempurna dan juga istirahat dari waktu ke waktu. FileZilla sangat stabil, tidak pernah benar-benar membuatnya rusak, tetapi tidak terlalu fleksibel karena fakta bahwa itu hanya dapat terhubung ke server SSH tunggal.

Tentu saja saya juga bisa me-mount folder dengan sshfs, tapi ini semacam solusi yang tidak nyaman. Terlalu banyak pekerjaan yang harus dilakukan untuk menjalankan transfer yang sederhana.

Apakah ada aplikasi yang dapat menangani transfer antara dua server SSH tanpa putus? Sempurna akan menjadi sesuatu seperti FileZilla, yang mengambil pekerjaan itu lagi jika koneksi terputus.

Socrates
sumber
Bukan jawaban karena ini bukan situs rekomendasi perangkat lunak, tetapi saya telah menggunakan (komersial) Beyond Compare ( scootersoftware.com ) selama bertahun-tahun, dan itu bagus untuk tugas semacam ini. Ia menawarkan dua jendela, yang keduanya dapat menunjukkan jalur lokal atau sftp: // URL, akan menunjukkan perbedaan antara folder, dan kemampuannya untuk menyalin hanya perbedaan yang membuat mekanisme resume yang sangat baik jika rusak, yang jarang terjadi dalam pengalaman saya. (Tidak tergabung dengan mereka kecuali menjadi pelanggan yang puas).
Guntram Blohm mendukung Monica

Jawaban:

36

Jika Anda menggunakan versi Ubuntu yang masih didukung, maka scpperintah Anda akan menyediakan -3sakelar yang memungkinkan menyalin file dari remote1 ke remote2 melalui localhost :

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

Anda juga dapat menghilangkan -3switch, tetapi kemudian Anda akan perlu kunci publik ( id_rsa.pub) dari user1@remote1dalam file authorized_keysdari user2@remote2:

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

scpkemudian di bawah kap melakukan yang ssh user1@remote1pertama dan dari sana scp /path/to/file1 user2@remote2:/path/to/file2. Itu sebabnya kredensial harus didistribusikan berbeda dari -3solusinya.

Dengan kata lain:

  • scp -3 remote1:file1 remote2:file2mentransfer file dari remote1 ke localhost dan kemudian kembali ke remote2 . Data tersebut melakukan perjalanan remote1 → localhost → remote2 . The localhost adalah pihak ke-3 dalam skenario ini, maka -3. Agar ini berfungsi, Anda akan memerlukan kredensial dari localhost pada remote1 dan remote2 karena localhost terhubung ke keduanya.

  • scp remote1:file1 remote2:file2menyalin file secara langsung dari remote1 ke remote2 dengan kecepatan yang terhubung satu sama lain. localhost tidak terlibat di sini (selain mengeluarkan perintah). Data melakukan perjalanan remote1 → remote2 . Agar ini berfungsi, Anda akan memerlukan kredensial dari localhost hanya pada remote1 tetapi juga Anda memerlukan kredensial remote1 pada remote2 karena localhost terhubung ke remote1 saja dan kemudian remote1 terhubung ke remote2 .

Jika memungkinkan saya akan memilih pendekatan kedua. Seperti beberapa komentar sudah katakan: biasanya sering kabel jaringan antara remote1 dan remote2 jauh lebih tebal daripada kabel antara mereka dan localhost .

PerlDuck
sumber
2
Itu sangat indah. ssh adalah pisau perangkat lunak tentara Swiss. Terima kasih, saya belajar sesuatu.
Marmer Organik
4
Perhatikan bahwa pendekatan ini, seperti pendekatan nautilus yang dijelaskan dalam pertanyaan, akan mentransfer file pertama kali ke mesin lokal, kemudian ke server kedua. Ini akan menyebabkan pelambatan yang signifikan ketika kedua server jarak jauh memiliki tautan yang lebih cepat di antara mereka daripada yang dilakukan oleh mesin lokal. (Misalnya, ketika server jarak jauh berada di pusat data dan mesin lokal memiliki koneksi DSL.)
Stobor
1
@Stobor Poin bagus, terima kasih. Saya memperbarui jawaban saya untuk sedikit menjelaskan bagaimana data perjalanan dengan dan tanpa data -3.
PerlDuck
1
Apakah metode kedua bekerja dengan penerusan agen, tanpa memiliki kunci atau kata sandi pada remote1?
Eric Duminil
1
@EricDuminil Saya khawatir saya tidak tahu. Saya tidak punya pengalaman nyata dengan penerusan agen. Tapi saya ragu karena remote1 seharusnya menolak akses ketika kunci atau kata sandi tidak diberikan, bukan?
PerlDuck
10

Dalam kebanyakan kasus, dua ssh server dapat saling menjangkau (atau setidaknya satu dapat menjangkau yang lain), dan sekali lagi dalam kebanyakan kasus, internet workstation jauh lebih buruk daripada salah satu server.

Jika demikian, memesan satu server untuk ditransfer ke yang lain adalah caranya.

ssh server1 nohup scp somefile server2:somefile

Periksa nohup.outpada server1 untuk kesalahan.

Jika jangkauan server adalah sebaliknya Anda dapat membalikkan mesin mana yang menjadi master:

ssh server2 nohup scp server1:somefile somefile
Joshua
sumber
7

Mungkin Anda bisa menggunakan salah satu dari beberapa front-end GUI untuk rsync:

Apakah ada aplikasi GUI untuk perintah rsync?

Atau mungkin Anda bisa menggunakan rsync langsung dari baris perintah untuk terhubung ke kedua server jarak jauh:

"Bagaimana cara me-rsync file di antara dua remote"

Saya sering masuk ke satu server dengan ssh, kemudian dari baris perintah server itu menggunakan rsync untuk mendorong atau menarik file ke server jauh lainnya - yang umumnya jauh lebih cepat daripada mencoba mentransfer file melalui beberapa komputer ke-3.

Rsync cukup pintar untuk melakukan beberapa pekerjaan, maka jika ada yang tidak beres dan mengganggu prosesnya, ia kemudian dapat melanjutkan tepat di tempat yang sebelumnya ditinggalkan.

David Cary
sumber
0

Anda perlu menggunakan protokol SCP. scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save

Gravemind
sumber
2
OP ingin menyalin file antara dua komputer jarak jauh, bukan dari komputer lokal ke komputer jarak jauh. Dia juga tampaknya mencari solusi GUI.
user68186
@ user68186 jawaban saya valid.
Gravemind