SSH (Secure Shell) digunakan untuk mengakses server jarak jauh secara aman melalui terminal. Perintah dasar untuk terhubung adalah ssh username@alamat_ip_server, namun untuk keamanan dan efisiensi maksimal, praktisi wajib menggunakan autentikasi berbasis SSH Key dan mengonfigurasi file ~/.ssh/config.
Mengapa Autentikasi SSH Key Wajib Menggantikan Password?
Mengandalkan password untuk akses root atau user sudo adalah celah keamanan fatal. Password rentan terhadap serangan brute-force, dictionary attack, hingga keylogging di mesin lokal.
SSH Key menggunakan kriptografi asimetris yang membagi akses menjadi public key dan private key. Server hanya menyimpan public key, sementara Anda memegang private key yang tidak pernah dikirim melalui jaringan.
Pendekatan ini mengubah paradigma keamanan dari “membuktikan Anda tahu kata sandi” menjadi “membuktikan Anda memiliki kunci fisik”. Bahkan jika jaringan disadap, private key tidak akan terekspos.
Bagaimana Cara Generate dan Distribusi SSH Key yang Benar?
Banyak tutorial usang masih menyarankan pembuatan kunci RSA 2048-bit. Untuk standar keamanan modern, gunakan algoritma Ed25519 yang lebih cepat, lebih pendek, dan tahan terhadap kelemahan kriptografis tertentu.
Buka terminal lokal Anda dan jalankan perintah berikut:
ssh-keygen -t ed25519 -C "[email protected]"
Tekan Enter untuk menyimpan di lokasi default (~/.ssh/id_ed25519). Sangat disarankan untuk menambahkan passphrase sebagai lapisan keamanan ganda jika private key Anda dicuri.
Selanjutnya, salin public key ke server target menggunakan utilitas bawaan:
ssh-copy-id username@alamat_ip_server
Jebakan Fatal Izin Direktori (Permissions)
Jika Anda menyalin public key secara manual dan SSH tetap menolak koneksi, 99% masalahnya ada pada izin folder. Server SSH akan menolak autentikasi key jika folder .ssh atau file authorized_keys terlalu permisif.
Pastikan Anda menjalankan perintah berikut di dalam server:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Bagaimana Cara Mengonfigurasi SSH Config agar Tidak Hafal IP?
Menghafal alamat IP, port, dan nama user untuk puluhan server adalah pemborosan waktu dan rentan terhadap typo. Praktisi senior menggunakan file konfigurasi klien SSH (~/.ssh/config) untuk membuat alias atau shortcut.
Buat atau edit file konfigurasi di mesin lokal Anda:
nano ~/.ssh/config
Tambahkan blok konfigurasi berikut untuk setiap server yang Anda kelola:
Host production
HostName 192.168.1.100
User deployer
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host staging
HostName 10.0.0.50
User admin
IdentityFile ~/.ssh/staging_key
Setelah disimpan, Anda tidak perlu lagi mengetik ssh [email protected] -p 2222. Cukup ketik ssh production, dan klien SSH akan secara otomatis menerjemahkannya ke parameter yang tepat.
Parameter Penting dalam SSH Config
| Parameter | Fungsi | Contoh Penggunaan |
|---|---|---|
Host |
Nama alias untuk perintah SSH. | Host web-server-1 |
HostName |
Alamat IP atau domain asli server. | HostName 203.0.113.10 |
User |
Username default untuk login. | User ubuntu |
Port |
Port SSH jika tidak menggunakan 22. | Port 2222 |
IdentityFile |
Path spesifik ke private key. | IdentityFile ~/.ssh/prod_key |
ServerAliveInterval |
Mencegah koneksi putus (timeout). | ServerAliveInterval 60 |
Kapan Waktu Tepat Mengubah Konfigurasi sshd_config Server?
Konfigurasi daemon SSH (sshd_config) harus diubah segera setelah server baru di-provisioning, sebelum aplikasi apa pun dideploy. Konfigurasi default OpenSSH mengizinkan login root dengan password, yang merupakan undangan terbuka bagi bot peretas.
Masuk ke server dan edit file konfigurasi daemon:
sudo nano /etc/ssh/sshd_config
Terapkan hardening dasar dengan mengubah atau menambahkan baris berikut:
Port 2222 # Ubah dari 22 untuk mengurangi noise log scanner
PermitRootLogin no # Wajibkan login user biasa, lalu sudo
PasswordAuthentication no # Paksa penggunaan SSH Key saja
PubkeyAuthentication yes # Pastikan autentikasi key aktif
Aturan Terminal Cadangan
Jangan pernah menutup terminal Anda setelah menjalankan sudo systemctl restart sshd. Selalu buka terminal kedua yang masih terhubung (logged in) sebelum me-restart service.
Jika Anda salah ketik konfigurasi (misalnya menonaktifkan PubkeyAuthentication sebelum key terpasang), Anda akan terkunci permanen dari server dan harus melakukan recovery via konsol cloud provider.
Penyebab Utama Error SSH dan Cara Debugging-nya
Ketika koneksi SSH gagal, pesan error bawaan seringkali terlalu umum. Memahami akar masalah memerlukan pendekatan debugging yang sistematis.
Gunakan flag verbose (-v) untuk melihat di mana tepatnya proses negosiasi koneksi gagal. Flag -v memberikan detail dasar, -vv lebih detail, dan -vvv memberikan jejak debug kriptografi penuh.
ssh -vvv production
Matriks Troubleshooting Error SSH
| Pesan Error | Penyebab Umum | Solusi Praktis |
|---|---|---|
Connection timed out |
Firewall memblokir port, atau IP salah. | Cek Security Group (AWS/GCP) atau ufw. Pastikan port SSH terbuka untuk IP Anda. |
Connection refused |
Service SSH tidak berjalan, atau port salah. | Pastikan Anda menggunakan port yang benar. Cek status service via konsol cloud. |
Permission denied (publickey) |
Server tidak mengenali key, atau izin file salah. | Cek izin folder .ssh (700) dan file key (600). Pastikan pubkey ada di authorized_keys. |
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! |
IP server digunakan ulang, atau ada serangan MITM. | Hapus key lama di lokal dengan ssh-keygen -R alamat_ip_server, lalu sambungkan ulang. |
Memahami alur negosiasi SSH—mulai dari pertukaran versi, pertukaran kunci algoritma, hingga autentikasi user—akan mengubah cara Anda mendiagnosis masalah dari sekadar menebak menjadi analisis berbasis data log.





