SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Apa Itu SSH dan Bagaimana Cara Kerjanya?

Pahami SSH sebagai kanal terenkripsi ke server remote, termasuk model klien-server, port 22, sidik jari host key, serta login dengan key atau password.

Apa itu SSH?

SSH (secure shell) adalah protokol untuk masuk ke komputer lain dan menjalankan perintah di komputer tersebut melalui koneksi terenkripsi. Teks yang Anda masukkan dikirim ke mesin remote, output-nya dikirim kembali, dan pihak yang memantau jaringan di antaranya tidak dapat membaca keduanya. Server Linux sewaan tidak memiliki layar dan keyboard yang terpasang, sehingga SSH adalah cara untuk menggunakan mesin tersebut.

Nama ini mencakup dua hal. SSH adalah protokol yang dijelaskan dalam RFC 4251 hingga RFC 4254. OpenSSH adalah program yang mengimplementasikannya. Hampir setiap server Linux dan hampir setiap laptop menggunakan program ini. Ketika seseorang mengatakan "SSH ke server", maksudnya adalah program klien ssh pada mesinnya berkomunikasi dengan program server sshd di sisi lain.

Masalah yang dirancang untuk diatasi SSH

Login jarak jauh sudah ada jauh sebelum SSH. Telnet membuka koneksi TCP biasa ke port 23 dan mengirim setiap byte persis seperti yang diketik. Tidak ada data yang dienkripsi, termasuk password Anda. Siapa pun yang dapat melihat trafik tersebut dapat membacanya: orang di jaringan kantor yang sama atau operator router mana pun di sepanjang jalur koneksi. Keluarga rlogin memiliki kelemahan yang sama. rlogin juga memercayai nama mesin klien, yang berarti memercayai apa pun yang diklaim jaringan sebagai nama tersebut.

Tatu Ylönen menulis SSH pertama pada 1995 di Helsinki University of Technology, setelah terjadi serangan pengintaian password pada jaringan universitas. Rancangannya mempertahankan bagian Telnet yang berguna, yaitu aliran byte antara terminal Anda dan shell jarak jauh, lalu menambahkan dua hal yang tidak dapat dijamin Telnet: enkripsi aliran tersebut dan bukti bahwa server di ujung lain adalah server yang memang ingin Anda akses.

Bagian kedua ini mudah terlewatkan, padahal merupakan setengah dari fungsi SSH. Enkripsi saja tidak akan melindungi Anda. Mesin yang berada di tengah dapat menerima koneksi Anda, mengenkripsinya dengan benar, membaca semua yang Anda kirim, lalu meneruskannya ke server yang sebenarnya. SSH mencegah hal itu dengan memberikan identitas permanen kepada setiap server, yang disebut host key, dan memeriksanya pada setiap koneksi.

Cara kerja model klien dan server

Terdapat dua program. Di server, sshd berjalan terus-menerus dan menunggu koneksi. Di mesin Anda, ssh membuat koneksi tersebut. Keduanya merupakan program terpisah dengan file konfigurasi yang terpisah. Kekeliruan membedakan keduanya merupakan alasan paling umum mengapa perubahan tidak berpengaruh.

  • Server membaca /etc/ssh/sshd_config. Di sinilah login menggunakan kata sandi dinonaktifkan dan port listening ditetapkan.
  • Klien membaca /etc/ssh/ssh_config untuk default sistem, lalu ~/.ssh/config untuk pengaturan per host milik Anda.

Pada Debian dan Ubuntu, unit service bernama ssh. Pada RHEL, Rocky, dan Fedora, unit tersebut bernama sshd. Rilis Ubuntu terbaru menginstalnya dalam mode socket activated. Karena itu, systemctl status ssh dapat melaporkan inactive (dead) saat mesin tetap dapat dijangkau. Penyebabnya, ssh.socket adalah unit yang melakukan listening dan memulai service sesuai permintaan.

Klien tidak harus berupa OpenSSH. PuTTY di Windows, Termius di ponsel, dan fitur remote support yang tersedia di editor juga menggunakan protokol yang sama untuk terhubung ke sshd yang sama. Windows 10 dan 11 juga menyertakan klien OpenSSH, sehingga ssh you@server dapat dijalankan di PowerShell tanpa menginstal apa pun.

Mengapa SSH menggunakan port 22?

Port adalah angka yang memberi tahu kernel program yang sedang listening mana yang menjadi tujuan koneksi masuk. Port di Linux bekerja dengan cara yang sama untuk setiap service. SSH menggunakan port 22 karena IANA menetapkannya pada 1995. Ylönen meminta nomor yang belum digunakan dan berada di dekat protokol yang hendak digantikan oleh SSH: 21 digunakan FTP, 23 digunakan telnet, sedangkan 22 belum digunakan.

Karena 22 adalah nilai default, semua komponen mengasumsikannya. Git remote, script backup, dan control panel provider Anda semuanya mencoba port 22 terlebih dahulu. Setiap automated scanner di Internet juga melakukannya. Server baru yang mengaktifkan login dengan password akan mulai menerima baris seperti ini di /var/log/auth.log dalam beberapa menit setelah boot:

Failed password for invalid user admin from 203.0.113.55 port 43122 ssh2

Traffic tersebut berlangsung terus-menerus dan tidak ditujukan kepada Anda secara pribadi. Memindahkan sshd ke port 2222 menghilangkan sebagian besar baris tersebut karena scanner menyapu seluruh Internet pada port 22, bukan mempelajari server Anda. Perubahan ini tidak membuat mesin lebih sulit dibobol oleh pihak yang benar-benar menargetkannya. Perlakukan perubahan port hanya sebagai pengurangan noise.

Anda dapat memantau respons server sebelum login:

nc 203.0.113.10 22

Di Ubuntu 24.04, perintah tersebut menampilkan sesuatu yang mendekati SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13. Banner dikirim dalam teks biasa sebelum enkripsi tersedia karena kedua sisi perlu menyepakati versi protokol. Tekan Ctrl+C untuk menutup koneksi.

Yang terjadi di jaringan saat Anda terhubung

Urutan di bawah ini adalah proses yang dilakukan satu ssh you@server sebelum Anda melihat prompt.

  1. Client menerjemahkan hostname menjadi alamat IP, lalu membuka koneksi TCP ke port 22.
  2. Kedua pihak mengirim banner versi dalam bentuk plaintext.
  3. Kedua pihak mengirim daftar algoritme yang didukung: key exchange, cipher, autentikasi pesan, dan kompresi. Data masih dalam bentuk plaintext. Opsi terkuat yang diketahui kedua pihak akan dipilih.
  4. Key exchange berlangsung. OpenSSH saat ini lebih memilih curve25519-sha256. Kedua endpoint akhirnya memegang shared secret yang sama tanpa secret tersebut pernah melintasi jaringan. Karena itu, pihak yang merekam seluruh percakapan tidak dapat menghitungnya setelahnya.
  5. Server menandatangani hasil pertukaran tersebut dengan private key host miliknya. Client Anda memeriksa signature tersebut terhadap public key host yang tersimpan. Langkah ini mencegah mesin di tengah jaringan menyamar sebagai server Anda.
  6. Enkripsi dimulai. chacha20-poly1305@openssh.com adalah cipher default pada OpenSSH saat ini.
  7. Baru setelah itu client mengautentikasi Anda menggunakan password atau key. Username dan password Anda dikirim melalui channel yang terenkripsi.
  8. Client membuka channel dan meminta shell.

Urutan tersebut merupakan seluruh perbedaan dari telnet. Autentikasi berlangsung setelah channel dienkripsi dan setelah server membuktikan identitasnya. Jadi, tidak ada saat ketika password Anda berada di jaringan dalam bentuk terbuka.

Pihak yang memantau jaringan tetap dapat mengetahui beberapa hal. Mereka dapat melihat alamat IP Anda, alamat IP server, port 22, kedua banner versi dalam bentuk plaintext, serta waktu dan perkiraan ukuran setiap paket. Mereka tidak dapat melihat username, password, command, atau outputnya. Pencarian hostname pada langkah 1 bukan bagian dari SSH dan biasanya tidak bersifat privat. Karena itu, query DNS yang menerjemahkan nama server Anda dapat mengungkap mesin yang akan Anda akses, meskipun sesi itu sendiri tetap terlindungi.

Kunci host dan prompt fingerprint pada koneksi pertama

Saat openssh-server diinstal, program tersebut membuat pasangan kunci host untuk mesin dan menuliskannya ke /etc/ssh/, misalnya ssh_host_ed25519_key dan ssh_host_ed25519_key.pub. Bagian privat tidak pernah meninggalkan server. Bagian publik adalah identitas server. Tanda tangan pada langkah 5 diverifikasi terhadap bagian publik tersebut.

Saat pertama kali terhubung ke server baru, client tidak memiliki kunci pembanding. Karena itu, client menampilkan prompt berikut:

The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:E9nVQ5Sm2oQ3nGm5Zf1tOaU7Xh0k2p8bWc4dLrTvYxA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Fingerprint adalah hash SHA256 dari kunci publik host yang dicetak dalam base64. Format ini membuatnya cukup singkat untuk dibandingkan secara visual. Mengetik yes akan menulis kunci tersebut ke ~/.ssh/known_hosts pada mesin Anda sendiri. Pada setiap koneksi berikutnya ke alamat yang sama, kunci yang ditawarkan server dibandingkan dengan kunci yang tersimpan. Jika keduanya cocok, tidak ada output yang ditampilkan dan Anda langsung masuk ke prompt.

Model ini disebut trust on first use. Anda perlu memahami konsekuensinya. Koneksi pertama adalah satu-satunya saat Anda tidak terlindungi karena Anda menerima kunci yang belum pernah Anda lihat sebelumnya. Untuk menutup celah tersebut, dapatkan fingerprint melalui jalur lain lalu bandingkan. Sebagian besar provider menampilkannya dalam output boot pada konsol web mereka. Anda juga dapat mencetaknya langsung di server:

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Perintah tersebut mencetak string SHA256: yang sama seperti yang ditampilkan oleh prompt. Pilihan [fingerprint] pada prompt tersedia khusus untuk tujuan ini. Masukkan fingerprint yang Anda harapkan. Client hanya melanjutkan jika fingerprint tersebut cocok dengan fingerprint yang diberikan server.

Pada Debian dan Ubuntu, known_hosts di-hash secara default. Karena itu, file tersebut berisi baris yang diawali |1|, bukan hostname yang dapat dibaca. Jalankan ssh-keygen -F 203.0.113.10 untuk menemukan entri bagi satu host.

Mengapa SSH mengatakan bahwa kunci host telah berubah?

Cepat atau lambat, Anda akan menemukan teks panjang berikut:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Pesan tersebut diakhiri dengan Host key verification failed., lalu client menolak koneksi. Pesan tersebut juga menampilkan Password authentication is disabled to avoid man-in-the-middle attacks., karena memasukkan kata sandi ke mesin yang tidak dikenal adalah risiko yang secara khusus ingin dicegah oleh pemeriksaan ini.

Pesan ini terdengar seperti keadaan darurat, tetapi biasanya tidak demikian. Penyebab yang umum:

  • Anda membangun ulang atau menginstal ulang server, sehingga sshd membuat kunci host baru saat boot pertama. Ini adalah penyebab yang paling umum.
  • Anda menghapus satu VPS lalu membuat VPS lain, dan provider memberikan alamat IP lama kepada mesin baru.
  • Anda terhubung melalui forward atau load balancer yang sekarang meneruskan koneksi ke mesin backend yang berbeda.
  • Memang ada pihak yang mencegat koneksi.

Tentukan penyebabnya sebelum menghapus apa pun. Jika Anda menginstal ulang mesin sepuluh menit yang lalu, penyebabnya jelas. Jika tidak ada perubahan di sisi Anda, berhenti dan lakukan investigasi, karena peringatan ini menunjukkan bahwa pemeriksaan tersebut berfungsi sebagaimana mestinya. Setelah Anda yakin, hapus entri yang sudah usang lalu hubungkan kembali:

ssh-keygen -R 203.0.113.10

Pada koneksi berikutnya, prompt fingerprint akan muncul lagi. Dengan demikian, Anda dapat kembali membandingkannya dengan fingerprint di konsol provider.

Login dengan kata sandi versus login dengan key

Autentikasi kata sandi mengirimkan kata sandi Anda melalui channel yang sudah terenkripsi, dan sshd memeriksanya terhadap database akun, biasanya melalui PAM (modul autentikasi yang dapat dicolokkan). Metode ini tidak memerlukan persiapan. Karena itu, provider dapat memberikan server baru hanya dengan kata sandi root.

Kelemahannya bukan pada enkripsi. Masalahnya adalah kata sandi merupakan secret yang pendek, Anda mengirimkannya ke server setiap kali login, dan port 22 ditebak sepanjang waktu oleh mesin yang tidak pernah lelah.

Autentikasi public key bekerja dengan cara berbeda. Anda membuat key pair pada mesin Anda sendiri. Bagian publiknya dimasukkan ke ~/.ssh/authorized_keys dalam akun Anda di server. Bagian privatnya tetap berada di laptop Anda dan tidak pernah dikirimkan. Untuk login, client menandatangani data yang mencakup session identifier dari pertukaran key, lalu server memverifikasi signature tersebut menggunakan public key yang sudah tersimpan. Karena data yang ditandatangani terikat pada session ini, signature yang berhasil ditangkap tidak berguna untuk hal lain.

Perhatikan arahnya, karena membaliknya merupakan kesalahan yang umum dan berbahaya: public key disimpan di server, sedangkan private key tetap bersama Anda. Private key yang disalin ke server adalah private key yang tidak lagi dapat Anda percayai.

Login dengan key juga memiliki jenis kegagalan tersendiri. sshd mengabaikan key jika permission file terlalu longgar, dan mencatatnya dalam log server:

Authentication refused: bad ownership or modes for directory /home/ubuntu/.ssh

Client hanya memberi tahu Anda Permission denied (publickey). Pesan ini sama untuk banyak penyebab yang berbeda. Karena itu, membaca error publickey dengan benar perlu dipelajari sebelum Anda kehilangan akses. Pekerjaan praktis untuk membuat key, melindunginya dengan passphrase, dan memuatnya ke agent dibahas dalam manajemen key SSH, sedangkan menonaktifkan login dengan kata sandi tanpa mengunci akses Anda sendiri dibahas dalam memperkuat keamanan SSH pada VPS.

SFTP, scp, dan penerusan port menggunakan koneksi yang sama

Berikut konsep yang membuat bagian lain dari SSH lebih mudah dipahami. Autentikasi membuka koneksi terenkripsi, dan koneksi tersebut dapat membawa beberapa channel independen secara bersamaan. Shell adalah salah satu jenis channel.

  • Shell jarak jauh. ssh you@server membuka session channel dan meminta interactive shell.
  • Satu perintah. ssh you@server uptime membuka channel, menjalankan satu perintah, menampilkan output, lalu keluar.
  • SFTP. Client meminta sshd untuk menjalankan subsystem sftp, lalu transfer file berlangsung di dalam koneksi yang sama. SFTP adalah protokol transfer file yang menggunakan SSH, dan tidak memiliki rancangan yang sama dengan FTP. Protokol yang menambahkan enkripsi pada FTP disebut FTPS dan tidak berkaitan dengan SFTP.
  • scp. Menyalin file menggunakan login yang sama. Sejak OpenSSH 9.0, yang dirilis pada 2022, scp menggunakan protokol SFTP secara default di balik layar.
  • Penerusan port. ssh -L 8080:localhost:80 you@server mengubah port 8080 pada laptop Anda menjadi jalur menuju port 80 pada server melalui koneksi terenkripsi. -R meneruskan koneksi ke arah sebaliknya, sedangkan -D 1080 mengubah session menjadi SOCKS proxy.
  • Git. Remote seperti git@github.com:user/repo.git adalah login SSH yang sisi remote-nya menjalankan command handler, bukan shell.
  • rsync dan Ansible juga merupakan client SSH. Keduanya membuka channel, menjalankan sesuatu, lalu membaca output yang dikembalikan.

Semua item dalam daftar tersebut menggunakan port yang sama, pemeriksaan host key yang sama, dan kredensial yang sama. Karena itu, menyiapkan key authentication satu kali langsung memberikan manfaat: semua tool tersebut dapat menggunakannya. Itulah sebabnya file ~/.ssh/config yang mempersingkat proses login Anda juga dapat digunakan saat Anda mengelola beberapa server Linux dari satu laptop.

Hal yang tidak dilakukan SSH

  • SSH tidak membuat server Anda aman. SSH melindungi jalur menuju pintu. Pintu itu tetap ada, dan orang akan terus mencoba membukanya. Memblokir percobaan login berulang dengan fail2ban menangani jumlah percobaan tersebut, sedangkan autentikasi hanya dengan key menghilangkan hal yang mereka coba tebak.
  • SSH tidak melindungi Anda dari komputer Anda sendiri. Siapa pun yang memiliki akses ke laptop Anda memiliki private key dan agent yang dimuat.
  • SSH tidak menyembunyikan bahwa Anda menggunakan SSH. Nomor port dan banner versi dalam teks biasa mengungkapkannya.
  • SSH tidak mencakup hal-hal yang terjadi sebelum koneksi terbentuk. Resolusi nama dan keputusan Anda tentang alamat mana yang tepercaya terjadi lebih dahulu.

Ke mana melangkah selanjutnya

Jika saat ini Anda memiliki server baru yang terbuka di konsol provider, urutan yang tepat sudah jelas. Masuk, buat user biasa, pasang key Anda, lalu tutup jalur akses yang mudah dieksploitasi. Sepuluh menit pertama pada VPS baru menjelaskan urutan tersebut dari awal hingga selesai, sedangkan apa sebenarnya VPS itu menjelaskan mesin di baliknya jika istilah-istilah tersebut masih baru bagi Anda. Setelah itu, baca artikel tentang key dan hardening dalam urutan tersebut.

FAQ

Apa kepanjangan SSH?

SSH adalah singkatan dari secure shell. SSH merupakan protokol untuk masuk ke komputer jarak jauh dan menjalankan perintah di komputer tersebut melalui koneksi terenkripsi, sebagaimana didefinisikan dalam RFC 4251 hingga RFC 4254. OpenSSH adalah implementasi yang digunakan hampir semua orang: klien ssh pada mesin Anda dan server sshd pada mesin jarak jauh. OpenSSH menggantikan telnet, yang mengirimkan semua data, termasuk kata sandi, melalui jaringan dalam teks biasa.

Mengapa SSH menggunakan port 22?

IANA menetapkan port 22 untuk SSH pada 1995, bersebelahan dengan FTP pada 21 dan telnet pada 23, yaitu protokol yang hendak digantikannya. Tidak ada yang mengharuskan penggunaan nomor tersebut: Port dalam /etc/ssh/sshd_config mengubahnya pada server, sedangkan ssh -p memilih port lain pada klien. Karena 22 adalah nilai default, pemindai otomatis terus-menerus mencoba terhubung ke port tersebut. Akibatnya, /var/log/auth.log pada server baru cepat dipenuhi baris Failed password for invalid user. Mengubah port mengurangi derau tersebut, tetapi tidak memberikan perlindungan nyata.

Apa yang harus saya lakukan saat SSH memperingatkan bahwa kunci host telah berubah?

Cari penyebabnya sebelum menghapus apa pun. Penyebab yang umum dan tidak berbahaya adalah server dibangun ulang sehingga sshd membuat kunci host baru, atau mesin baru diberi alamat IP lama. Jika Anda mengetahui bahwa mesin tersebut dibangun ulang, jalankan ssh-keygen -R <host> untuk menghapus kunci yang tersimpan, lalu sambungkan kembali dan bandingkan fingerprint yang ditampilkan dengan fingerprint yang dilaporkan konsol provider Anda. Jika tidak ada perubahan di sisi Anda, jangan terhubung dan jangan masukkan kata sandi. OpenSSH memang menolak autentikasi kata sandi dalam kondisi ini karena alasan tersebut.

Apakah SFTP dan scp berbeda dari SSH?

Keduanya berjalan di atas SSH. Setelah Anda melakukan autentikasi, koneksi SSH dapat membawa beberapa channel, dan shell hanyalah salah satunya. SFTP adalah protokol transfer file yang menggunakan subsystem sftp dari sshd melalui koneksi yang sama, dan scp telah menggunakan protokol SFTP di bawahnya sejak OpenSSH 9.0. Port forwarding dan Git melalui SSH juga merupakan channel pada koneksi yang sama. Semuanya menggunakan port yang sama, pemeriksaan kunci host yang sama, dan login yang sama. Perhatikan bahwa SFTP bukan FTP yang ditambahkan enkripsi. Protokol tersebut disebut FTPS dan merupakan protokol terpisah.

Apakah autentikasi dengan kunci benar-benar lebih baik daripada kata sandi?

Ya, untuk server apa pun yang dapat dijangkau dari Internet. Kata sandi adalah rahasia singkat yang Anda berikan kepada server pada setiap login, sedangkan port 22 terus-menerus ditebak oleh klien otomatis. Dengan pasangan kunci, bagian privat tidak pernah meninggalkan mesin Anda. Klien menandatangani data yang terkait dengan sesi saat ini, lalu server memeriksa tanda tangan tersebut terhadap kunci publik dalam ~/.ssh/authorized_keys. Tanda tangan yang direkam tidak dapat digunakan kembali untuk server lain. Lindungi kunci privat dengan frasa sandi, karena file kunci tanpa frasa sandi dapat digunakan untuk login oleh siapa pun yang menyalinnya.