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.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 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 scp
biner 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 #RETR
perintah. 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.