it-swarm-id.com

Apa perbedaan antara protokol SFTP, SCP dan FISH?

Saya dulu 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). Membutuhkan SSH2. Ini BUKAN sama sebagai SCP! ".

Jika tidak sama maka apa yang saya salah pahami?

67
Ivan

SFTP bukan protokol FTP melebihi ssh, tetapi ekstensi untuk protokol SSH yang 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 protokol lain yang dapat menggunakan SSH atau RSH untuk mentransfer file.

63
jsbillings

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). Itulah yang Anda gunakan saat Anda ssh ke server dan ketik perintah di Prompt Shell jarak jauh.

[~ # ~] scp [~ # ~] adalah transfer file yang dilakukan hanya dengan menggunakan Shell dan perintah jarak jauh. Di SCP, setelah klien terhubung ke server, dan semua otentikasi dan otorisasi telah dilakukan, klien mengirim perintah Shell remote seperti scp -f myfile.txt, yang hanya menulis konten file myfile.txt ke stream (untuk dibaca klien) atau scp -t myfile.txt yang membaca dari aliran dan menulis ke myfile.txt.

Anda akan melihat bahwa -f dan -t (untuk "dari" dan "ke") tidak ada di halaman 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 responsnya adalah paket berkode biner dengan 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 disaring, dan respons dapat datang dalam urutan apa pun. Ini bisa berarti bahwa sesi menghabiskan lebih sedikit waktu 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 biner pengguna scp dengan symlink ke biner SFTP. SFTP ini memiliki tampilan dan nuansa scp, tetapi di bawah sampulnya menggunakan protokol SFTP.

Kutipan - O'Reilly SSH: 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 pengembang klien Midnight Commander mulai membuat solusi mereka 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 #RETR perintah. Namun jika server jarak jauh tidak memiliki server Ikan yang 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 untuk mengganti nama, memindahkan, memotong, dll.

Detail 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 ( Kutipan diperlukan)
  • Ikan mungkin berguna dalam keadaan khusus, tetapi sebaliknya gunakan SFTP yang lebih standar.
34
slim

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) 
21
c2h2

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).

FISH memerlukan 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).

Artikel IKAN Wikipedia

11
N J