SSH Kamu Susah Konek Karena Host Key Berubah? Begini Cara Hapus Dari Known Hosts
Pernah ngalamin momen pas lagi asyik-asyiknya ngoding atau ngoprek server, terus tiba-tiba koneksi SSH kamu error? Muncul peringatan aneh yang bikin jidat berkerut, kayak "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" atau "Host key verification failed." Rasanya kayak lagi asyik ngobrol sama teman, eh tiba-tiba teman itu ganti suara dan penampilan, bikin kamu curiga. Nah, di dunia server, itu mirip-mirip dengan masalah host key yang berubah.
Jangan panik dulu! Ini adalah salah satu masalah umum yang sering banget dialamin sama developer, sysadmin, atau siapa pun yang sering berinteraksi dengan server lewat SSH. Sebenarnya, pesan error itu adalah fitur keamanan SSH yang sangat penting. Tujuannya baik, yaitu ngasih tahu kamu kalau ada sesuatu yang gak beres atau gak sesuai ekspektasi. Tapi, kadang-kadang ya bikin jengkel juga kalau kita yakin servernya baik-baik aja.
Artikel ini bakal ngebahas tuntas kenapa masalah ini bisa muncul, apa itu host key, dan yang paling penting, gimana cara ngatasinnya dengan aman dan efektif, khususnya dengan menghapus entri yang bermasalah dari file known_hosts
kamu. Kita bakal pakai gaya bahasa yang santai, biar kamu bisa paham tanpa harus pusing tujuh keliling. Yuk, langsung aja kita kupas!
Apa Sih SSH dan Kenapa Host Key Itu Penting Banget?
Sebelum masuk ke solusi, kita pahami dulu fondasinya. SSH, singkatan dari Secure Shell, adalah protokol jaringan yang memungkinkan kamu buat akses komputer lain (server atau VPS) secara aman melalui jaringan yang tidak aman, seperti internet. Ini semacam terowongan rahasia yang terenkripsi, jadi semua data yang lewat di dalamnya aman dari intipan pihak luar.
Nah, dalam proses pembentukan terowongan aman ini, ada satu komponen penting yang namanya "Host Key". Kamu bisa bayangin host key ini kayak sidik jari uniknya sebuah server. Setiap server punya sidik jari kriptografi sendiri yang gak akan sama dengan server lain. Pas kamu pertama kali konek ke server pakai SSH, server itu akan ngasih sidik jarinya ke klien SSH kamu. Klien SSH kamu lalu nyimpen sidik jari ini di sebuah file di komputer lokal kamu, namanya knownhosts (biasanya ada di ~/.ssh/knownhosts
).
Tujuannya apa? Simpel: biar kamu yakin kalau server yang kamu akses itu beneran server yang kamu tuju, bukan server palsu yang mencoba menyamar (istilah teknisnya "man-in-the-middle attack" atau MITM). Jadi, setiap kali kamu konek ke server itu lagi, klien SSH kamu akan ngebandingin sidik jari yang diterima dari server dengan sidik jari yang tersimpan di known_hosts
.
- Kalau cocok: Sip, koneksi dilanjut.
- Kalau gak cocok: Nah, ini dia alarmnya berbunyi! SSH akan curiga dan ngasih peringatan bahwa "remote host identification has changed." Dia gak mau ngelanjutin koneksi karena takut kamu lagi di tengah-tengah serangan.
Penting banget kan host key ini? Ibaratnya, kamu punya daftar kontak teman di HP. Setiap kontak punya foto profil. Kalau tiba-tiba foto profil temanmu di daftar kontak berubah, tapi dia bilang itu masih dia, kamu pasti curiga, kan? SSH juga gitu.
Kenapa Host Key Bisa Berubah dan Bikin SSH Curiga?
Oke, sekarang kita tahu kenapa SSH ngasih peringatan. Tapi, kenapa sih host key-nya bisa berubah? Apakah selalu karena serangan berbahaya? Jawabannya: gak selalu. Ada beberapa skenario umum yang menyebabkan perubahan host key, dari yang "biasa aja" sampai yang "beneran bahaya":
- Servernya Di-reinstall atau Di-reset Ulang: Ini penyebab paling umum. Kalau server kamu di-reinstall sistem operasinya (misal, dari Ubuntu 20.04 ke 22.04, atau servernya kena masalah terus di-provision ulang), semua konfigurasi, termasuk host key-nya, akan di-generate ulang. Otomatis sidik jarinya jadi beda dengan yang tersimpan di
known_hosts
kamu. - Migrasi Server atau Perubahan IP Address: Server kamu mungkin dipindahkan ke hardware fisik baru atau penyedia cloud baru, atau bahkan cuma ganti IP address, tapi internal servernya tetap sama. Kalau IP-nya tetap tapi server di baliknya berbeda, atau IP-nya berubah, ini bisa memicu perubahan key.
- Lingkungan Cloud yang Dinamis: Kamu pakai AWS EC2, DigitalOcean Droplet, atau penyedia cloud lain? Kadang, instance (server virtual) di cloud bisa di-terminate terus di-provision lagi dengan IP yang sama atau IP yang baru. Meskipun IP-nya sama, kalau instance-nya baru, host key-nya pasti baru juga. Ini sering banget terjadi di lingkungan cloud yang punya fitur auto-scaling atau instance yang sifatnya ephemeral (sementara).
- Load Balancer atau Perubahan Arsitektur Jaringan: Kalau server kamu di belakang load balancer atau ada perubahan signifikan pada infrastruktur jaringan yang kamu akses, ada kemungkinan host key yang kamu lihat berbeda.
- Yang Paling Berbahaya: Serangan Man-in-the-Middle (MITM): Ini skenario terburuknya. Ada penyerang yang berhasil menyusup di antara kamu dan server tujuanmu. Penyerang ini mencoba meniru server asli, mengintercept koneksi kamu, dan menyajikan host key palsu. Kalau kamu sembarangan menerima key baru, penyerang ini bisa membaca semua komunikasi kamu dengan server, termasuk username dan password. Serem kan?
Mengingat potensi MITM attack, makanya SSH sangat ketat dengan validasi host key. Lebih baik waspada daripada kecolongan.
Gimana Cara Cek Isi File known_hosts
?
Sebelum kita ngoprek file ini, ada baiknya kamu tahu dulu isinya kayak apa dan di mana letaknya. File knownhosts ini adalah file plain text yang ada di dalam folder .ssh di direktori home user kamu. Jadi, lokasinya biasanya di ~/.ssh/knownhosts
.
Untuk melihat isinya, kamu bisa pakai perintah terminal sederhana:
bash
cat ~/.ssh/known_hosts
Atau kalau isinya panjang dan kamu mau scroll:
bash
less ~/.ssh/known_hosts
Kamu akan melihat baris-baris seperti ini:
hostname.example.com,192.168.1.1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4...
another.server.com,10.0.0.5 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI...
[192.168.1.2]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMD...
Setiap baris mewakili satu server yang pernah kamu akses, diikuti dengan jenis algoritmanya (misal: ssh-rsa
, ecdsa-sha2-nistp256
, ssh-ed25519
) dan string panjang yang merupakan fingerprint dari host key tersebut. Kamu juga bisa melihat ada kombinasi hostname dan IP address.
Penting diingat, setiap baris adalah satu entri unik. Kalau kamu punya masalah dengan serverA, kamu cuma perlu menghapus baris yang berkaitan dengan serverA
aja, gak perlu semuanya.
Solusi Praktis: Menghapus Host Key dari Known Hosts
Oke, ini dia bagian intinya. Ada beberapa cara buat menghapus entri host key yang bermasalah dari file known_hosts
kamu. Kita mulai dari yang paling direkomendasikan dan aman, sampai ke cara terakhir yang sedikit "bar-bar".
Metode 1: Menggunakan ssh-keygen -R
(Paling Aman dan Direkomendasikan)
Ini adalah cara yang paling bersih dan direkomendasikan karena ssh-keygen
dirancang khusus untuk mengelola host keys. Kamu cuma perlu nunjukkin hostname atau IP address server yang bermasalah, dan ssh-keygen
akan otomatis mencari dan menghapus baris yang relevan dari known_hosts
.
Langkah-langkahnya:
- Buka Terminal: Pastikan kamu ada di terminal atau command prompt kamu.
- Jalankan Perintah: Ganti
hostnameatauipaddresskamu
dengan hostname atau IP address server yang bikin masalah. Misalnya, kalau masalahnya sama192.168.1.100
, perintahnya jadi:
bash
ssh-keygen -R 192.168.1.100
Atau kalau masalahnya sama myserver.example.com
:
bash
ssh-keygen -R myserver.example.com
Perintah ini akan mencari semua entri yang cocok dengan hostname atau IP tersebut di file ~/.ssh/known_hosts
dan menghapusnya. Biasanya, akan ada output yang nunjukkin baris mana yang dihapus.
- Coba Konek Lagi ke Server: Setelah berhasil dihapus, coba lagi konek ke server yang bermasalah itu pakai perintah SSH biasa.
bash
ssh username@hostnameatauipaddresskamu
Kali ini, SSH akan nanya lagi untuk konfirmasi host key yang baru:
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
PENTING BANGET: Jangan langsung ketik yes
! Kamu harus verifikasi fingerprint host key yang baru ini. Kita akan bahas cara verifikasinya di bagian selanjutnya. Setelah yakin, baru ketik yes
dan enter.
Metode 2: Mengedit File known_hosts
Secara Manual
Kalau karena suatu alasan Metode 1 gak berhasil atau kamu pengen kontrol lebih, kamu bisa edit file known_hosts
secara manual menggunakan text editor. Cara ini sedikit lebih berisiko kalau kamu gak hati-hati, karena salah hapus bisa bikin masalah lain.
Langkah-langkahnya:
- Buka File
known_hosts
dengan Text Editor: Kamu bisa pakai editor favoritmu, misalnyanano
(mudah buat pemula) atauvim
(kalau kamu udah familiar).
bash
nano ~/.ssh/known_hosts
Atau:
bash
vim ~/.ssh/known_hosts
- Cari Baris yang Bermasalah: Scroll ke bawah atau gunakan fitur pencarian editor kamu (
Ctrl+W
di nano,/
di vim) untuk mencari hostname atau IP address dari server yang bermasalah.
Contoh, kalau servernya 192.168.1.100
, cari baris yang mengandung 192.168.1.100
. Mungkin ada juga yang pakai hostname, jadi perhatikan juga itu.
...
myserver.example.com,192.168.1.100 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4... <--- Hapus baris ini
another.server.com,10.0.0.5 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI...
...
- Hapus Baris Tersebut: Setelah ketemu, hapus seluruh baris yang berisi entri hostname/IP yang bermasalah itu. Pastikan kamu cuma menghapus baris yang relevan dan tidak merusak baris-baris lain.
- Simpan Perubahan dan Keluar dari Editor:
* Untuk nano
: Tekan Ctrl+X
, lalu Y
(untuk menyimpan), lalu Enter
. * Untuk vim
: Tekan Esc
, lalu ketik :wq
dan Enter
.
- Coba Konek Lagi: Sama seperti Metode 1, coba konek lagi ke server. SSH akan meminta konfirmasi host key baru. Ingat, verifikasi dulu sebelum ketik
yes
!
Metode 3: Hapus Baris Otomatis dengan sed
atau awk
(Untuk yang Jago CLI)
Kalau kamu sudah familiar dengan command line utilities dan pengen solusi one-liner yang cepat, kamu bisa pakai sed
atau awk
. Cara ini juga bagus karena lebih akurat daripada manual editing, asalkan pattern-nya benar.
Menggunakan sed
:
bash
sed -i '/hostnameatauipaddresskamu/d' ~/.ssh/known_hosts
- Ganti
hostnameatauipaddresskamu
dengan yang sesuai. -i
artinya edit file di tempat (in-place).'/pattern/d'
artinya hapus baris yang mengandungpattern
tersebut.
Menggunakan awk
:
bash
awk -i inplace '!/hostnameatauipaddresskamu/' ~/.ssh/known_hosts
- Ganti
hostnameatauipaddresskamu
dengan yang sesuai. -i inplace
(atau-i
di beberapa versiawk
) artinya edit file di tempat.'!/pattern/'
artinya cetak semua baris KECUALI yang mengandungpattern
tersebut.
Kedua perintah ini akan langsung menghapus baris yang cocok tanpa perlu membuka editor. Setelah itu, kamu bisa coba konek lagi ke server dan verifikasi host key-nya.
Metode 4: Hapus Seluruh File known_hosts
(Opsi Terakhir, Kurang Disarankan)
Ini adalah cara paling "bar-bar" dan sebaiknya hanya dilakukan sebagai upaya terakhir jika kamu benar-benar stuck dan metode lain tidak berhasil, atau kalau kamu yakin tidak ada host key penting lainnya yang tersimpan di situ.
Risikonya: Semua host key server yang pernah kamu akses akan terhapus. Artinya, setiap kali kamu konek ke server manapun setelah ini, SSH akan meminta konfirmasi host key baru lagi. Ini bisa merepotkan dan sedikit menurunkan tingkat keamanan karena kamu harus memverifikasi ulang semua server.
Langkah-langkahnya:
- Hapus File:
bash
rm ~/.ssh/known_hosts
- Coba Konek Lagi: Seperti biasa, coba konek lagi. Karena file
known_hosts
sudah gak ada, SSH akan membuat file baru dan meminta konfirmasi untuk host key server yang pertama kali kamu akses. Verifikasi host key-nya!
VERIFIKASI HOST KEY BARU: Ini PENTING BANGET!
Tadi kita udah berkali-kali bahas untuk verifikasi host key baru sebelum ketik yes
. Kenapa sih sepenting itu? Karena ini adalah garda terdepan kamu untuk mencegah serangan MITM. Kalau kamu asal ketik yes
, kamu berpotensi besar memberikan akses ke penyerang.
Gimana Cara Verifikasi Host Key yang Benar?
- Dapatkan Fingerprint dari Server Asli (Paling Direkomendasikan):
Kalau kamu punya akses langsung ke server (misal, via console di panel penyedia cloud seperti AWS, DigitalOcean, atau melalui KVM di server fisik), kamu bisa melihat fingerprint host key yang benar langsung dari server itu sendiri. * Login ke server via console. * Jalankan perintah ini untuk melihat fingerprint key publik server (sesuaikan dengan jenis key yang ingin kamu cek, umumnya rsa
atau ed25519
):
bash
sudo ssh-keygen -lf /etc/ssh/sshhostrsa_key.pub
sudo ssh-keygen -lf /etc/ssh/sshhosted25519_key.pub
* Kamu akan melihat output seperti:
256 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx no comment (RSA)
* Bandingkan string SHA256:xxxxxxxx...
ini dengan yang ditampilkan di terminal kamu waktu SSH minta konfirmasi. Harus persis sama!
- Tanyakan ke Rekan Kerja/Admin Server:
Kalau server itu dikelola bareng-bareng, tanyakan ke admin atau rekan kerja kamu yang lain. Mereka mungkin punya catatan fingerprint host key yang benar, atau mereka bisa bantu untuk mengambilnya langsung dari server.
- SSHFP DNS Record (Tingkat Lanjut):
Beberapa server dikonfigurasi dengan SSHFP record di DNS-nya. Ini adalah cara yang paling aman karena SSH bisa secara otomatis memverifikasi host key melalui DNS. Tapi, ini tidak umum dan butuh konfigurasi di sisi server dan DNS.
Apa yang Harus Dilakukan Kalau Fingerprint Tidak Cocok?
Jika fingerprint yang kamu dapatkan dari server (atau rekan kerja) tidak cocok dengan yang ditampilkan di terminal kamu, JANGAN PERNAH KETIK yes
! Segera batalkan koneksi (Ctrl+C
) dan investigasi lebih lanjut. Ini adalah tanda bahaya serius. Bisa jadi server kamu dikompromikan atau ada serangan MITM. Kontak admin server atau penyedia cloud kamu segera.
Tips Tambahan dan Best Practices untuk Penggunaan SSH
Setelah kamu berhasil mengatasi masalah host key, ada beberapa tips dan kebiasaan baik yang bisa kamu terapkan agar pengalaman kamu dengan SSH lebih aman dan nyaman:
- Selalu Backup Folder
.ssh
: Sebelum kamu melakukan operasi besar pada file-file SSH kamu, terutamaknownhosts atau idrsa
, selalu biasakan untuk membuat backup.
bash
cp -r ~/.ssh ~/.sshbackup$(date +%Y%m%d%H%M%S)
Ini bisa jadi penyelamat kalau kamu gak sengaja menghapus file penting.
- Gunakan SSH Config File (
~/.ssh/config
):
Untuk kamu yang sering ngelola banyak server, file konfigurasi SSH ini adalah penyelamat hidup. Kamu bisa membuat alias untuk server-server kamu, menentukan user, port, identity file (SSH key) yang digunakan, dan pengaturan lainnya. Ini juga bisa membantu kamu mengelola entri known_hosts
yang berbeda untuk setiap server jika diperlukan. Contoh file ~/.ssh/config
:
Host my-dev-server
HostName 123.45.67.89
User ubuntu
Port 22
IdentityFile ~/.ssh/idrsadev
StrictHostKeyChecking yes # Ini default, tapi bagus untuk tahu
UserKnownHostsFile ~/.ssh/knownhostsdev # Bisa pakai known_hosts terpisah
Dengan config ini, kamu cukup ketik ssh my-dev-server
atau ssh production-backend
. Lebih ringkas dan rapi!
- Pahami
StrictHostKeyChecking
:
* yes
(default): Ini adalah pengaturan yang paling aman. SSH akan selalu memeriksa host key dan akan menolak koneksi jika key berubah (inilah yang kita bahas di artikel ini). * no
: Ini sangat tidak disarankan! SSH tidak akan pernah memeriksa host key. Ini membuat kamu sangat rentan terhadap serangan MITM karena SSH tidak akan memberi tahu kamu kalau ada sesuatu yang salah. Hindari ini kecuali ada kebutuhan yang sangat spesifik dan kamu memahami penuh risikonya. * ask
: Mirip dengan yes
, tapi SSH akan selalu meminta konfirmasi setiap kali kamu konek ke server baru, bahkan jika key-nya sudah ada di known_hosts
.
- Jaga Keamanan Server Kamu: Masalah host key berubah seringkali bukan karena serangan, tapi karena server di-reinstall. Pastikan server kamu selalu di-update dengan patch keamanan terbaru, gunakan firewall, dan praktik keamanan server lainnya untuk meminimalkan risiko harus reinstall atau menghadapi serangan nyata.
- Gunakan VPN Saat Mengakses Server dari Jaringan Publik: Kalau kamu sering kerja dari kafe atau jaringan WiFi publik, pertimbangkan untuk menggunakan Virtual Private Network (VPN). Ini akan menambahkan lapisan keamanan ekstra dengan mengenkripsi trafik kamu sebelum mencapai internet publik, mengurangi risiko MITM di jaringan lokal.
Studi Kasus Ringkas: Rebuild Server di Cloud
Bayangkan kamu punya server web di DigitalOcean dengan IP 100.10.20.30
. Beberapa minggu lalu, server ini mengalami masalah serius karena kamu salah konfigurasi pas ngoprek. Akhirnya, kamu memutuskan untuk "rebuild" droplet itu dari awal dengan sistem operasi yang bersih, tapi kamu tetap pakai IP yang sama.
Setelah rebuild selesai, kamu coba konek lagi:
bash
ssh user@100.10.20.30
Dan BOOM! Muncul peringatan:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:abcd123efgh456ijk789lmn012pqrstuvwxyza.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key for IP: 100.10.20.30
ECDSA host key for 100.10.20.30 has changed and you have requested strict checking.
Host key verification failed.
Karena kamu yang melakukan rebuild, kamu tahu bahwa perubahan host key ini wajar dan bukan karena serangan.
Solusinya:
- Hapus entri lama:
bash
ssh-keygen -R 100.10.20.30
- Coba konek lagi:
bash
ssh user@100.10.20.30
- Verifikasi key baru: Karena kamu tahu servernya baru di-rebuild, kamu bisa yakin bahwa host key yang sekarang ditampilkan adalah yang benar. Kamu bisa login ke console DigitalOcean, masuk ke server, dan cek fingerprint-nya langsung dengan
sudo ssh-keygen -lf /etc/ssh/sshhostecdsa_key.pub
(atau sesuai jenis key yang muncul di error). Setelah yakin cocok, baru ketikyes
.
Sekarang kamu bisa kembali melanjutkan aktivitas kamu di server tanpa hambatan.
Kesimpulan
Masalah "Host key verification failed" karena perubahan host key adalah hal yang wajar dalam dunia pengelolaan server, terutama dengan dinamika cloud dan seringnya reinstall. Penting banget untuk memahami bahwa ini adalah fitur keamanan, bukan sekadar bug yang bikin sebel.
Dengan memahami apa itu host key, kenapa bisa berubah, dan bagaimana cara membersihkan entri dari file known_hosts
(terutama dengan ssh-keygen -R
), kamu sudah selangkah lebih maju dalam mengelola infrastruktur IT kamu dengan lebih aman dan percaya diri. Ingat, selalu utamakan verifikasi host key baru sebelum mengetik "yes" untuk mencegah potensi serangan berbahaya.
Mengelola server memang butuh ketelitian, tapi dengan pengetahuan yang tepat, masalah-masalah seperti ini bisa diatasi dengan mudah. Terus belajar, terus eksplorasi, dan jangan takut mencoba hal baru (tentunya dengan tetap berhati-hati)! Semoga artikel ini membantu kamu mengatasi masalah SSH dan membuat pengalaman ngoding kamu lebih mulus!