Apa perbedaan antara protokol SFTP, SCP dan FISH?

59

Dulu saya berpikir SCP adalah alat untuk menyalin file melalui SSH, dan menyalin file melalui SSH disebut SFTP, yang merupakan sinonim dari FISH.

Tapi sekarang ketika saya sedang mencari plugin Total Commander untuk melakukan ini di Windows, saya perhatikan bahwa di halamannya tertulis "Mengizinkan akses ke server jauh melalui FTP aman (FTP via SSH). Memerlukan SSH2. Ini BUKAN sama sebagai SCP! ".

Jika tidak sama maka apa yang saya salah pahami?

Ivan
sumber
5
Ini merupakan perpanjangan dari pertanyaan sebelumnya . (@Ivan: akan sangat membantu untuk menyebutkan ini.)
Gilles 'SO- stop being evil'

Jawaban:

57

SFTP bukan protokol FTP lebih dari ssh, tetapi ekstensi untuk protokol SSH termasuk dalam SSH2 (dan beberapa implementasi SSH1). SFTP adalah protokol transfer file yang mirip dengan FTP tetapi menggunakan protokol SSH sebagai protokol jaringan (dan manfaat dari meninggalkan SSH untuk menangani otentikasi dan enkripsi).

SCP hanya untuk mentransfer file, dan tidak dapat melakukan hal-hal lain seperti daftar direktori jarak jauh atau menghapus file, yang dilakukan SFTP.

FISH tampaknya merupakan protokol lain yang dapat menggunakan SSH atau RSH untuk mentransfer file.

jsbillings
sumber
11
Layak menambahkan: ada juga FTPS, yang merupakan FTP over TLS.
mikemaccana
3
@mikemaccana Anda kemudian dapat menambahkan FTPES penyihir adalah kemungkinan untuk menggunakan ftps secara eksplisit melalui koneksi ftp biasa
Kiwy
26

Protokol SSH membuat terowongan aman tempat Anda dapat mentransfer aliran dua arah, dan Anda dapat menggunakan aliran itu untuk menghubungkan dua proses yang Anda sukai.

Dua proses yang paling akrab adalah shell (di server) dan emulator terminal interaktif (di klien). Itu yang Anda gunakan ketika Anda ssh ke server dan ketik perintah di prompt shell jauh.

SCP adalah transfer file yang dilakukan hanya dengan menggunakan shell dan perintah jarak jauh. Dalam SCP, setelah klien terhubung ke server, dan semua otentikasi dan otorisasi telah dilakukan, klien mengirim perintah seperti shell remote scp -f myfile.txt, yang hanya menulis isi file myfile.txt ke aliran (untuk klien membaca) atau scp -t myfile.txtyang membaca dari aliran dan menulis ke myfile.txt.

Anda akan melihat bahwa -f dan -t (untuk "dari" dan "ke") tidak ada di halaman manual scp. Mereka dianggap internal. Ada skema pengakuan ringan, dan skema untuk mentransfer direktori dengan membungkus isi file dalam header sederhana. Tetapi untuk sebagian besar SCP adalah masalah dasar menulis byte file ke terowongan SSH, membiarkan SSH menangani hal-hal rumit seperti kompresi dan integritas.

SFTP adalah protokol transfer file yang jauh lebih kompleks, yang lagi-lagi disetel melalui SSH.

Dalam SFTP baik permintaan dan tanggapan adalah paket yang disandikan biner dengan nama-nama seperti "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".

Salah satu fitur menarik dari protokol adalah bahwa perintah dapat disalurkan, dan respons dapat datang dalam urutan apa pun. Ini dapat berarti bahwa sesi menghabiskan lebih sedikit waktu untuk menunggu tanggapan, dan ada peluang untuk mengoptimalkan transfer bersamaan dari satu server dengan sumber data dari berbagai kecepatan - meskipun saya tidak tahu sejauh mana peluang itu diambil.

SFTP memiliki perintah untuk melakukan banyak hal yang tidak ditangani oleh SCP; seperti delete, rename, truncate, move, dll.

Semua detail tersedia dalam Draft IETF .

Perlu dicatat bahwa paket SSH yang lebih baru menggantikan scpbiner pengguna dengan symlink ke biner SFTP. SFTP ini memiliki tampilan dan nuansa scp, tetapi di bawah selimut itu menggunakan protokol SFTP.

Kutipan - O'Reilly SSH: The Secure Shell, The Definitive Guide , bagian 5.7 "Subsistem":

PERINGATAN: Jangan hapus baris subsistem-sftp dari sshd2_config: ini diperlukan agar scp2 dan sftp berfungsi. Secara internal, kedua program menjalankan ssh2 -s sftp untuk melakukan transfer file.

Ikan adalah bagian sejarah yang menarik. Katakanlah Anda ingin mentransfer file melalui SSH, tetapi sistem jarak jauh Anda tidak memiliki SCP. Atau mungkin Anda ingin melakukan operasi file yang lebih canggih daripada SCP, tetapi sistem jarak jauh Anda tidak memiliki SFTP. Tidak satu pun dari skenario itu yang mungkin terjadi saat ini, tetapi ketika Fish ditemukan, mereka melakukannya.

Jadi para pengembang klien Midnight Commander mulai membuat solusi sendiri. Ini mirip dengan scp pada prinsipnya, tetapi ada lebih banyak perintah. Klien mengirim perintah yang terlihat seperti:

 #RETR /some/name
 ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'

Jika Anda berbicara dengan server Fish, maka itu akan menafsirkan #RETRperintah. Namun jika server jarak jauh tidak memiliki server Ikan diinstal, perintah akan ditafsirkan oleh shell. Pertama komentar, lalu perintah yang mencetak info tentang file, diikuti oleh isi file yang dikelilingi oleh beberapa penanda.

Secara efektif, tanpa adanya scp atau fish, klien telah "menggulung sendiri" yang setara dengan scp - tetapi ia dapat mengirim perintah shell yang sama untuk mengganti nama, memindahkan, memotong, dll.

Rincian Ikan ada di sumber Midnight Commander di sini .

Apa arti semua ini dari perspektif pengguna akhir?

  • implementasi SSH server yang lebih lama mendukung scp tetapi tidak SFTP; Anda tidak dapat menggunakan klien SFTP dengan ini
  • Gunakan SFTP untuk kinerja, keandalan, dan fleksibilitas
  • Klien "scp" Anda mungkin merupakan klien SFTP yang menyamar ( Rujukan? )
  • Ikan mungkin berguna dalam keadaan khusus, tetapi sebaliknya gunakan SFTP yang lebih standar.
ramping
sumber
20

Sederhananya:

SFTP = SSH + SFTP-server on server
SCP  = SSH + `scp` on server side
FISH = SSH + `dd` (and some other basic Unix utilities on the server side only) 
c2h2
sumber
1
Tetapi sftpdan scpmembutuhkan program khusus di sisi server, tidak seperti FISH, yang hanya menggunakan utilitas Unix dasar di shell jauh.
imz - Ivan Zakharyaschev
Menurut deskripsi FISH, fitur FISH yang luar biasa adalah bahwa ia tidak memerlukan sesuatu yang khusus di sisi jarak jauh (tidak ada program server, seperti scpuntuk scp atau sftp-server). Dan memang ada kasus ketika sisi jarak jauh adalah "Unix" terbatas, di mana Anda tidak dapat menginstal apa yang Anda inginkan: untuk mentransfer file ke Android melalui SSH (melalui WiFi), saya telah menulis serangkaian skrip rpush-cat - mungkin, klien IKAN akan bekerja. ( tramp-fish.eldalam Emacs juga bisa: klien TRAMP reguler tidak bekerja karena stattidak ada di Android.)
imz - Ivan Zakharyaschev
2
Bisakah Anda menguraikan bagaimana scpjuga diperlukan di sisi server, di samping sisi klien? Dengan pencarian google cepat, saya tidak dapat menemukan apa pun yang mengkonfirmasi yang scpjuga diperlukan di sisi server.
Johannes Bittner
11

FISH dan SFTP serupa, dan seperti yang diamati keduanya bekerja dengan baik pada SSH, SFTP memerlukan dukungan dan konfigurasi khusus di Server SSH untuk memfasilitasi transfer, tetapi sedikit lebih aman dan memungkinkan SysAdmins untuk hanya mengizinkan SFTP (dalam situasi ini IKAN menang dapat bekerja).

IKAN membutuhkan shell (sh / rsh misalnya) untuk menyalin, dan karenanya memerlukan akses SSH penuh ke mesin, saya akan membayangkan akan lebih sulit untuk mengamankan (saya tidak bisa berkomentar secara objektif tentang ini karena saya tidak pernah harus).

Jika memungkinkan, saya akan merekomendasikan SFTP, scp, FISH (dalam urutan itu).

Wikipedia IKAN Artikel

NJ
sumber
Menurut deskripsi yang ditautkan, fitur luar biasa dari FISH adalah bahwa ia tidak memerlukan sesuatu yang khusus di sisi jarak jauh (tidak ada program server, seperti scpuntuk scp atau sftp-server). Dan memang ada kasus ketika sisi jarak jauh adalah "Unix" terbatas, di mana Anda tidak dapat menginstal apa yang Anda inginkan: untuk mentransfer file ke Android melalui SSH (melalui WiFi), saya telah menulis serangkaian skrip rpush-cat - mungkin, klien IKAN akan bekerja. ( tramp-fish.eldi Emacs juga bisa: klien TRAMP reguler tidak bekerja karena stattidak ada di Android.)
imz - Ivan Zakharyaschev