Setiap kali developer men-deploy website, me-restart server, atau push kode ke Git host, besar kemungkinan SSH sedang bekerja diam-diam di balik layar. SSH, singkatan dari Secure Shell, adalah protokol yang memungkinkan kamu login ke komputer jarak jauh dan menjalankan perintah di sana, dengan seluruh percakapan terenkripsi sehingga tidak ada yang menguping di tengah jalan bisa membacanya.
Key Takeaways
SSH adalah protokol kriptografi untuk login jarak jauh yang aman dan layanan jaringan lain melalui jaringan yang tidak aman, seperti didefinisikan RFC 4251.
SSH berjalan di TCP port 22 secara default, dan menggantikan Telnet dan rlogin yang mengirim password dalam bentuk plain text.
SSH memiliki tiga lapisan: transport (enkripsi dan autentikasi server), autentikasi pengguna (membuktikan siapa kamu), dan connection (multiplexing channel di dalam satu tunnel terenkripsi).
Autentikasi kunci publik adalah cara login yang direkomendasikan: private key kamu tidak pernah meninggalkan mesin kamu, dan server hanya menyimpan public key kamu.
Di luar terminal, SSH juga menggerakkan transfer file yang aman (SFTP dan SCP), port forwarding, dan Git over SSH.
Apa Sebenarnya SSH Itu
RFC 4251, yang diterbitkan IETF pada Januari 2006, mendeskripsikan SSH sebagai protokol untuk login jarak jauh yang aman dan layanan jaringan aman lainnya melalui jaringan yang tidak aman. Frasa kuncinya adalah "melalui jaringan yang tidak aman": SSH berasumsi seseorang mungkin mengawasi traffic, dan dirancang agar pengawasan itu tidak menghasilkan apa-apa.
Dalam praktiknya, kamu mengetik sesuatu seperti `ssh user@example.com`, client dan server menyepakati enkripsi, memverifikasi identitas masing-masing, lalu kamu mendapat prompt shell di mesin jarak jauh. Semua yang kamu ketik dan semua yang dicetak server kembali berjalan di dalam tunnel terenkripsi. Tunnel yang sama juga bisa membawa transfer file, port yang di-forward, dan layanan lain, semuanya dimultiplexing sebagai channel terpisah.
SSH bukan satu program. SSH adalah protokol, dan implementasi paling umum adalah OpenSSH, yang sudah terpasang di Linux dan macOS serta tersedia di Windows. Ketika orang bilang "SSH ke server," biasanya maksudnya "gunakan SSH client untuk terhubung ke SSH daemon server."
Kenapa Telnet Harus Pensiun
Sebelum SSH, login jarak jauh berarti Telnet atau rlogin, dan keduanya mengirim segalanya, termasuk password kamu, dalam bentuk plain text. Siapa pun yang bisa mengamati traffic jaringan bisa begitu saja membaca password dari kabel. Itulah masalah yang ingin diselesaikan peneliti Finlandia Tatu Ylonen: pada 1995, didorong serangan password sniffing di jaringan universitasnya, ia merancang versi pertama SSH sebagai pengganti rlogin, Telnet, FTP, dan rsh yang aman, menurut Wikipedia.
Ylonen merilis implementasinya sebagai freeware pada Juli 1995, dan penyebarannya cepat. Ia memilih port 22 untuk SSH karena posisinya pas di antara FTP di port 21 dan Telnet di port 23, dan port 22 tetap menjadi port default SSH sampai hari ini. SSH-1 yang asli punya kelemahan, sehingga protokolnya didesain ulang menjadi SSH-2, yang distandardisasi IETF dalam seri RFC 4250 sampai 4256, dengan RFC 4251 mendeskripsikan arsitektur keseluruhannya. SSH modern berarti SSH-2. SSH-1 sudah usang dan tidak boleh dipakai lagi.
Tiga Lapisan SSH
SSH dibangun dalam tiga lapisan, masing-masing dengan tugas berbeda, seperti dijelaskan RFC 4251:
Lapisan transport: lapisan ini berjalan pertama. Lapisan ini mengautentikasi server, menegosiasikan algoritma enkripsi, melakukan pertukaran kunci, dan membangun channel dengan kerahasiaan dan integritas. Setelah lapisan ini aktif, semua yang lain terenkripsi.
Lapisan autentikasi pengguna: lapisan ini berjalan di atas lapisan transport dan mengautentikasi client ke server, lewat password, kunci publik, atau metode lain.
Lapisan connection: lapisan ini mem-multiplexing tunnel terenkripsi menjadi beberapa channel logis, sehingga satu koneksi SSH bisa membawa shell interaktif, transfer file, dan port yang di-forward secara bersamaan.
Desain berlapis inilah yang membuat SSH lebih dari sekadar remote shell. Lapisan connection mengubah satu tunnel yang terotentikasi dan terenkripsi menjadi channel aman serbaguna, dan layanan baru bisa berjalan di atasnya tanpa menciptakan ulang enkripsi.
Cara Kerja Koneksi SSH, Langkah demi Langkah
Login yang umum mengikuti urutan ini:
Client kamu terhubung ke server di TCP port 22 (atau port kustom, jika dikonfigurasi).
Client dan server menegosiasikan algoritma enkripsi, pertukaran kunci, dan integritas yang akan dipakai.
Server menyajikan host key-nya. Client kamu memeriksanya terhadap database known hosts, file `known_hosts`, untuk memastikan ia berbicara dengan server yang sama seperti sebelumnya. Jika kuncinya berubah tanpa diduga, client memperingatkan kamu, karena itu bisa menandakan serangan man in the middle.
Pertukaran kunci menghasilkan session key bersama, sehingga semua traffic selanjutnya terenkripsi dan terlindungi integritasnya.
Kamu mengautentikasi, biasanya dengan password atau kunci publik.
Lapisan connection membuka channel, dan kamu mendapat shell, menjalankan satu perintah, atau memulai transfer file.
Pemeriksaan host key di langkah 3 lebih penting daripada yang dikira banyak orang. Enkripsi saja hanya menjamin tidak ada yang bisa membaca traffic; enkripsi tidak menjamin kamu berbicara dengan server yang benar. Host key-lah yang mengikat tunnel terenkripsi itu ke identitas server tertentu.
Autentikasi Kunci Publik: Login Tanpa Mengirim Rahasia
Login password bisa dipakai, tapi punya dua kelemahan: password bisa ditebak, dan password dikirim ke server (di dalam tunnel terenkripsi, tapi tetap ke server). Autentikasi kunci publik menghindari keduanya.
Kamu membuat pasangan kunci di mesin kamu sendiri, biasanya dengan `ssh-keygen`. Private key tetap di mesin kamu, idealnya dilindungi passphrase. Public key dimasukkan ke file authorized keys server untuk akun kamu. Saat login, server memeriksa bahwa public key kamu terotorisasi, lalu client membuktikan ia memegang private key yang cocok dengan menandatangani challenge, seperti dijelaskan dokumentasi kunci publik OpenSSH. Private key itu sendiri tidak pernah dikirim ke mana-mana, dan passphrase juga tidak pernah meninggalkan mesin kamu.
Inilah kenapa administrator server merekomendasikan login berbasis kunci dan menonaktifkan autentikasi password di server yang menghadap internet: tidak ada password yang bisa di-brute force penyerang. Tipe kunci modern seperti Ed25519 adalah default yang bagus, dan kunci berbasis hardware tersedia untuk setup dengan keamanan lebih tinggi.
SSH Lebih dari Sekadar Terminal
Terminal adalah penggunaan yang terkenal, tapi SSH melakukan jauh lebih banyak:
Transfer file yang aman: SFTP menjalankan transfer file melalui koneksi SSH, dan SCP menyalin file dengan cara yang sama. Keduanya menggantikan FTP biasa, yang mengirim kredensial dan data tanpa enkripsi.
Port forwarding: SSH bisa mem-forward port lokal ke layanan jarak jauh, sehingga kamu bisa mengakses database atau dashboard web yang hanya bisa diakses dari server, melalui tunnel terenkripsi.
Tunneling dan jump host: setup bastion atau jump host memungkinkan kamu menjangkau server privat melalui satu titik masuk SSH yang diperkeras, alih-alih mengekspos setiap server ke internet.
Git over SSH: ketika kamu clone atau push dengan URL `git@`, Git berjalan di atas SSH, mengautentikasi kamu dengan SSH key kamu. Itu mekanisme kunci yang sama seperti dijelaskan di atas, diterapkan ke version control, yang dibahas panduan Git kami dari sisi repository.
SSH vs Telnet Sekilas
Aspek | Telnet | SSH |
|---|---|---|
Enkripsi | Tidak ada, semua plain text | Enkripsi penuh untuk seluruh sesi |
Keamanan password | Password terlihat oleh siapa pun yang mengawasi traffic | Password terenkripsi, atau digantikan autentikasi kunci |
Identitas server | Tidak ada verifikasi | Host key diperiksa terhadap known hosts |
Transfer file | FTP terpisah yang tidak aman | SFTP dan SCP melalui tunnel yang sama |
Port forwarding | Tidak ada | Ya, bawaan lapisan connection |
Port default | 23 | 22 |
Status saat ini | Usang untuk akses jarak jauh | Standar untuk administrasi jarak jauh |
Checklist Hardening untuk Server Beneran
Kalau kamu menjalankan server, ini dasar-dasar yang layak dilakukan, secara berurutan:
Gunakan autentikasi kunci publik dan nonaktifkan autentikasi password.
Lindungi private key kamu dengan passphrase yang kuat, dan jangan pernah menyalinnya ke server.
Selalu perbarui software SSH server, karena versi lama membawa celah yang sudah diketahui.
Pertimbangkan mengganti port default atau membatasi akses lewat firewall, bukan sebagai pengganti kunci, tapi untuk mengurangi percobaan login otomatis.
Tinjau authorized keys secara berkala dan hapus kunci milik orang yang tidak lagi butuh akses.
Jangan pernah mengabaikan peringatan host key berubah tanpa memverifikasi dulu kenapa ia berubah.
SSH juga berpasangan alami dengan model login di panduan OAuth kami: OAuth menjawab apa yang boleh dilakukan sebuah aplikasi atas nama kamu, sementara SSH menjawab bagaimana kamu menjangkau dan mengelola mesin itu sendiri dengan aman. Lapisan berbeda, prinsip yang sama: jangan pernah menyerahkan rahasia mentah ketika kredensial yang ber-scope dan bisa dicabut sudah cukup.
Baca versi Bahasa Inggris dari artikel ini di SSH Explained: How Secure Remote Access Actually Works.
FAQ
Apakah SSH sama dengan VPN?
Tidak. VPN mengenkripsi semua traffic jaringan sebuah perangkat dan menempatkan perangkat itu di jaringan lain. SSH mengenkripsi satu koneksi (atau beberapa channel yang di-forward) ke satu server. Keduanya menyelesaikan masalah berbeda, meski tunneling SSH bisa menyerupai VPN untuk layanan tertentu.
Apakah saya butuh SSH kalau hanya memakai panel web hosting?
Kemungkinan tidak secara langsung, tapi server provider hosting kamu memakai SSH di balik layar, dan begitu kamu mengelola VPS, server cloud, atau Git host, SSH menjadi cara standar untuk masuk.
Apa yang terjadi kalau host key server berubah?
Client kamu memperingatkan kamu dan menolak terhubung sampai kamu mengonfirmasi. Penyebab yang sah adalah reinstall server atau rotasi kunci. Penyebab yang tidak sah adalah serangan man in the middle. Selalu verifikasi ke administrator server sebelum menerima kunci yang berubah.
Bisakah saya memakai SSH di Windows?
Ya. Windows modern sudah membawa OpenSSH client, dan tools seperti PuTTY tetap menjadi alternatif populer. Protokolnya sama apa pun client-nya.
Kenapa port 22 begitu sering diserang?
Karena port itu adalah default yang terkenal, pemindai otomatis mencobanya terus-menerus. Itulah kenapa login berbasis kunci penting: penyerang bisa mengetuk port 22 seharian, tapi tanpa private key kamu mereka tidak bisa masuk.
