Saya ingin mentransfer file (folder musik) antara dua komputer Linux. Setelah mencari cara terbaik untuk melakukan ini, saya telah melihat bahwa ada banyak cara untuk melakukan ini. Saya tahu ini telah diminta banyak , di mana-mana dan setiap saat . Masalah utama dengan ini adalah tidak ada konsensus yang jelas dan terkini tentang satu cara terbaik untuk melakukan tugas ini pada tahun 2011 untuk pemula Linux (bahkan tergantung pada beberapa parameter).
Jadi dalam semangat situs web Stack Exchange, saya ingin ini tidak terkait dengan situasi khusus saya, tetapi lebih merupakan panduan bagi orang lain juga tentang cara mentransfer file antara dua komputer Linux melalui jaringan lokal. Saya pikir wiki akan bermanfaat bagi banyak orang.
Inilah yang saya temukan sejauh ini:
- ssh
- sshfs
- scp
- sftp
- nfs
- samba
- pemberi
Apa yang paling mudah? Paling fleksibel? Paling sederhana? Solusi terbaik? Apa pro dan kontra dari masing-masing? Apakah ada opsi lain (lebih baik)? Apa parameter dalam memilih metode terbaik (solusi mungkin tergantung pada jumlah file, ukuran file, kemudahan vs fleksibilitas, ...)?
sumber
Jawaban:
Dalam lingkungan Linux, untuk keamanan dan kemudahan penggunaan, ssh adalah cara terbaik untuk maju. SSH, SSHFS, SCP, dan SFTP seperti yang Anda daftarkan adalah semua layanan berbeda yang dibangun di atas protokol SSH. SCP sangat mudah digunakan, ini berfungsi seperti CP tetapi Anda dapat memberikan nama pengguna dan mesin di jalurnya. Jadi, kita mungkin melakukan CP seperti
cp ~/music/ ~/newmusic/
, tetapi kita bisa dengan mudah melakukannyascp ~/music/ user@host:~/newmusic
untuk mengirimkannya ke komputer bernama host. Itu saja - kita tidak perlu mengatur apa pun. Anda akan dimintai kata sandi akun di mesin lain jika Anda tidak memiliki sertifikat atau beberapa autentikasi yang disiapkan (scp berbagi pengaturan tersebut dengan ssh, tentu saja).SFTP adalah alat yang membuatnya mudah untuk melakukan banyak operasi pada sistem file jarak jauh - ia berfungsi seperti FTP, tetapi dijalankan melalui SSH sehingga aman dan hanya membutuhkan server SSH.
man sftp
akan memberi tahu Anda semua tentang cara menggunakannya. Saya tidak menggunakan SFTP hanya untuk memindahkan folder di antara dua mesin, itu lebih berguna ketika Anda memiliki banyak operasi yang harus dilakukan, seperti jika Anda mengatur ulang file di komputer lain.SSHFS hanya memperluas SFTP ke sistem file: ini memungkinkan Anda untuk memasang host virtual ke sistem file Anda, sehingga hal-hal jaringan terjadi secara sangat transparan. SSHFS adalah untuk pengaturan semi-permanen, bukan hanya transfer file satu kali. Dibutuhkan lebih banyak upaya untuk mengatur, yang dapat Anda baca di situs web proyek .
Jika Anda perlu bekerja di lingkungan OS campuran, Samba menjadi taruhan terbaik Anda berikutnya. Windows dan OS X mendukung Samba sepenuhnya secara otomatis, dan Linux juga melakukannya meskipun kadang-kadang kasar untuk digunakan.
sumber
scp
bekerja, apakah kita perlu mengatur semacam server ssh, pendengar atau membuka blokir sesuatu di sisi lain? Saya mendapatkan kesalahan "Sambungan ditolak".openssh-server
harus diinstal di Ubuntu Natty.ssh
menggunakan enkripsi, yang akan menyebabkan beberapa overhead tambahan. Jika komputer yang terlibat memiliki CPU yang cukup lambat, ini mungkin membuat perbedaan. Dalam hal itunetcat
atau yang serupa (lihat jawaban Caspar) mungkin lebih disukai. Tentu saja hanya jika Anda tidak benar-benar membutuhkan enkripsi (dalam LAN yang dilindungi).Favorit pribadi saya untuk kasus-kasus di mana keamanan tidak penting adalah netcat + tar :
Untuk mengirim direktori, cd ke dalam direktori yang isinya ingin Anda kirim di komputer melakukan pengiriman dan lakukan:
tar -cz . | nc -q 10 -l -p 45454
Di komputer yang menerima konten, cd ke tempat Anda ingin konten muncul dan lakukan:
nc -w 10 $REMOTE_HOST 45454 | tar -xz
Ganti
$REMOTE_HOST
dengan ip / hostname komputer yang melakukan pengiriman. Anda juga dapat menggunakan port lain sebagai ganti45454
.Apa yang sebenarnya terjadi di sini adalah bahwa komputer 'penerima' terhubung ke komputer pengirim pada port 45454 dan menerima isi tar dan gzip dari direktori, dan mengirimkannya langsung ke tar (dan gzip) untuk mengekstraknya ke dalam direktori saat ini.
Contoh cepat (menggunakan localhost sebagai host jarak jauh)
Komputer 1
Komputer 2
sumber
-q
pilihan menunjukkan bahwa Anda menggunakan openbsd-netcat , sementara gnu-netcat juga cukup umum (default di Arch Linux ). Bisakah Anda memperluas jawaban Anda dengan menyertakan sintaks gnu-netcat ?Untuk sekali gerakan, scp disarankan.
Tetapi jika Anda menemukan bahwa dir ini dapat berfungsi dan Anda perlu memindahkannya berkali-kali agar posisi lain diperbarui, Anda dapat menggunakan rsync (with ssh).
Karena rsync memiliki banyak argumen, saya biasanya memasukkannya ke dalam shell kecil jadi saya memperbaikinya (setiap waktu). Idenya adalah hanya mengirim hal-hal yang telah berubah sejak terakhir kali dijalankan.
Ini akan memindahkan direktori yang disebut "/ home / media / music /" dari komputer lokal ke komputer bernama 192.168.0.33, menggunakan pengguna "nisse". Dan hapus apapun pada target yang tidak ada pada pc lokal.
sumber
Saya akan merekomendasikan Anda mencoba alternatif daripada langsung dengan SSH untuk memindahkan file di dalam LAN Anda sendiri karena overhead adalah IMMENSE. Saya akan menggunakan solusi Caspar jika ini karena alasan apa pun tidak akan berhasil untuk Anda:
Pada sumber:
Di tempat tujuan:
Ini tidak hanya lebih ringan daripada menggunakan SSH tetapi jauh lebih cepat dengan kecepatan berkisar 45 ~ 65MiB pada standar CAT6 UTP.
Jika Anda benar-benar ingin memeras maksimal dari koneksi coba ganti
wget
denganlftp
dan gunakanpget -n20
danmirror -r
perintah.sumber
Mungkin yang tercepat
netcat
(seperti yang dijelaskan caspar).Saya suka kombinasi
tar
&ssh
, yang aman dan masih cepat:Tentang sumbernya
Melakukannya sebagai root, ia mempertahankan izin file. Atau gunakan
-p
di kedua sisi. Juga-S
dapat dipertimbangkan jika Anda memiliki file jarang.Dimungkinkan untuk mengurangi overhead enkripsi
ssh
jika Anda menggunakanarcfour
sebagai cipher yang berfungsi dengan openSSH:Untuk memperbarui jalur jarak jauh,
rsync
sempurna:sumber
Jika benar-benar harus dilakukan melalui LAN, saya akan menggunakan
rsync
, karena akan mengambil di mana ia tinggalkan jika terputus. Ini juga memiliki beberapa trik lain untuk meminimalkan jumlah data yang ditransfer, meskipun saya ragu bahwa banyak / salah satu dari mereka akan relevan dengan kasus menyalin perpustakaan musik ke lokasi yang masih perawan. Jika keamanan menjadi perhatian, aturRSYNC_RSH=ssh
terlebih dahulu dan data akan disalurkan melalui ssh.Jika saya benar-benar melakukannya, saya mungkin tidak akan menggunakan LAN sama sekali. Saya akan menyalin file ke, kemudian mematikan, hard drive USB. Dalam pengalaman saya, ini dapat dengan mudah beberapa kali lipat lebih cepat daripada melewati LAN, meskipun harus menyalin file dua kali - USB 2.0 dinilai untuk 480Mbps, yang lebih cepat dari apa pun yang kekurangan gigabit ethernet, plus itu kurang sensitif terhadap kondisi yang akan menurunkan kinerja LAN. Ini juga sepenuhnya OS-independen, asalkan Anda menggunakan sistem file yang dapat ditangani oleh semua mesin yang terlibat - Saya akan merekomendasikan VFAT / FAT32, karena itu cukup universal.
sumber
Saya akan menyarankan rsync karena akan menyalin file secara bertahap. Anda dapat mengaturnya untuk menyalin hanya file yang diubah atau baru hanya setelah Anda melakukan pembaruan awal. Anda dapat menggunakan ssh sebagai lapisan transport jika diinginkan.
sumber
Saya menggunakan Unison , yang merupakan sinkronisasi file yang luar biasa pada banyak protokol berbeda. Anda bisa mengkonfigurasinya untuk menggunakan
scp
,rcp
,ftp
atau bahkan secara lokal pada filesystem antara dua folder. Saya menggunakannya untuk menyinkronkan perpustakaan musik saya, karena dapat mentransfer banyak file sekaligus melalui jaringan dan benar-benar bisa disetel dalam konfigurasinya. Saya menyimpan cadangan koleksi musik saya dan menyinkronkan lebih dari 2-3 komputer. Itu hanya akan menyalin file yang diubah, dan melakukannya dengan menjaga indeks di kedua ujung transfer sehingga dapat mengetahui kapan klien telah mengubah file atau ketika file server telah berubah.Jarak tempuh Anda mungkin berbeda, tetapi tentu saja jauh lebih baik daripada memasukkan
scp
seluruh koleksi musik Anda setiap kali Anda menambahkan lagu baru :)sumber
Saya mengikuti proses ssh untuk login tanpa kata sandi terlebih dahulu http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/
Untuk skrip dan file teks berikut ini berfungsi baik untuk saya
Untuk mentransfer data dari host lokal ke host jarak jauh.
cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"
Untuk mentransfer data dari host jarak jauh ke host lokal.
ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile
Ini berfungsi bagi saya untuk mentransfer file pada sistem embedded yang tidak memiliki klien ssh atau scp.
Tidak scp - hanya ssh.
sumber