Mengaktifkan SSH di Ubuntu: Pasang OpenSSH dan Amankan
- 6 Oktober 2026
- 09.00
- Oleh Adrien Roche
- Jaringan

Mengaktifkan SSH di Ubuntu: pasang, jalankan, buka firewall
SSH di Ubuntu berasal dari paket openssh-server. Ubuntu Server menawarkan pemasangannya saat instalasi dan hampir semua image cloud atau VPS sudah menjalankannya; Ubuntu Desktop sama sekali tidak memasangnya.
1. Pasang openssh-server
sudo apt update
sudo apt install -y openssh-serverJika paketnya sudah ada, apt akan memberi tahu dan tidak mengubah apa pun. Pemasangan ini juga mendaftarkan profil aplikasi UFW bernama OpenSSH, yang dipakai pada langkah 3.
2. Aktifkan dan jalankan layanannya
sudo systemctl enable --now ssh
systemctl status sshDi Ubuntu unit-nya bernama ssh; sshd hanyalah alias. enable --now menjalankan daemon sekarang dan pada setiap boot. Sejak Ubuntu 22.10 sshd diaktifkan lewat socket: ssh.socket memiliki port 22 dan menjalankan ssh.service pada koneksi masuk pertama, sehingga status inactive (dead) dengan TriggeredBy: ssh.socket tepat setelah pemasangan adalah normal — port-nya terbuka. Untuk gambaran lebih luas, lihat cara menampilkan daftar layanan dengan systemctl.
3. Izinkan SSH melewati UFW
Ubuntu mengirim UFW dalam keadaan nonaktif. Jika Anda menyalakannya, izinkan SSH lebih dulu; menyalakan firewall sebelum aturannya ada adalah cara klasik untuk mengunci diri sendiri dari mesin jarak jauh.
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw statusufw allow OpenSSH memakai profil aplikasi tersebut dan membuka 22/tcp. Jika nanti Anda memindahkan sshd, izinkan port baru dengan sudo ufw allow 2222/tcp lalu hapus aturan lama. Cari alamat server dengan hostname -I.
Menyambung dari Windows, macOS, atau Linux
Semua sistem operasi desktop masa kini sudah memuat klien OpenSSH bawaan, dan sintaksnya sama di mana pun:
ssh username@SERVER_IP
ssh -p 2222 username@SERVER_IP # non-default port- Windows 10 dan 11: buka PowerShell atau Windows Terminal lalu ketik perintahnya; klien OpenSSH sudah disertakan di Windows sejak 2018 (versi 1809). Jika
sshtidak dikenali, tambahkan lewat Settings > Apps > Optional features. - macOS: Terminal, perintah yang sama.
- Linux: terminal apa pun;
openssh-clientterpasang secara bawaan di Ubuntu.
Pada koneksi pertama, terima sidik jari host key server dengan yes; nilainya disimpan di ~/.ssh/known_hosts dan Anda akan diperingatkan bila suatu saat berubah. Lalu ketik kata sandi akun. Bagian berikutnya menggantinya dengan kunci.
Beralih ke autentikasi berbasis kunci
Login kata sandi adalah sasaran brute force botnet sepanjang waktu; kunci membuat upaya itu sia-sia. Buat pasangan kunci Ed25519 di komputer Anda sendiri, jangan di server:
ssh-keygen -t ed25519 -C "laptop-2026"Terima jalur bawaan (~/.ssh/id_ed25519) dan pasang passphrase; ia mengenkripsi kunci privat di disk, dan dengan SSH agent Anda cukup mengetiknya sekali per sesi. Hanya berkas .pub yang boleh keluar dari mesin Anda.
Salin kunci publik ke server
Di macOS dan Linux, ssh-copy-id melakukannya dalam satu langkah, memakai kata sandi Anda untuk terakhir kalinya:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@SERVER_IPBuild OpenSSH untuk Windows tidak menyertakan ssh-copy-id; alirkan saja kuncinya dari PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh username@SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Kedua cara itu menambahkan kunci ke ~/.ssh/authorized_keys milik pengguna tersebut. Hak akses itu penting: sshd mengabaikan berkas tanpa pesan apa pun bila ~/.ssh bukan mode 700 atau authorized_keys dapat ditulis oleh selain pemiliknya. Dari terminal baru, ssh username@SERVER_IP kini seharusnya memasukkan Anda tanpa kata sandi akun. Jangan sentuh bagian berikutnya sebelum itu berhasil.
Mengeraskan sshd_config: tanpa kata sandi, tanpa root, pengguna terdaftar saja
Biarkan sesi Anda saat ini tetap terbuka selama menyunting; jika konfigurasi baru merusak sesuatu, itulah jalan masuk Anda kembali. /etc/ssh/sshd_config diawali dengan Include /etc/ssh/sshd_config.d/*.conf, dan sshd mempertahankan nilai pertama yang dibacanya untuk setiap kata kunci, sehingga berkas drop-in mengalahkan apa pun yang ada di bawahnya pada berkas utama. Image cloud pun sering menyertakan /etc/ssh/sshd_config.d/50-cloud-init.conf berisi PasswordAuthentication yes, itulah sebabnya menyunting berkas utama sering tampak tidak berpengaruh. Solusinya adalah berkas drop-in yang namanya terurut paling awal:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confTempelkan isi berikut, ganti username dengan nama login Anda sendiri:
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
AllowUsers username
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2PermitRootLogin no mengandaikan Anda punya akun non-root dengan hak sudo. Jika sampai sekarang Anda bekerja sebagai root, buat pengguna sudo di Linux dan salin kunci Anda ke akun itu sebelum menerapkan berkas ini. Setelah itu validasi sintaksnya, muat ulang, dan periksa nilai yang benar-benar dipakai sshd setelah semua include digabung (itulah yang dicetak sshd -T):
sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin|allowusers|port'Buka terminal kedua dan masuk dengan kunci Anda sebelum menutup yang pertama. Berikut fungsi tiap direktif:
| Direktif | Nilai | Efek |
|---|---|---|
PasswordAuthentication | no | Hanya kunci; brute force kata sandi menjadi mustahil, bukan sekadar lambat. |
KbdInteractiveAuthentication | no | Menutup jalur challenge-response yang bisa dipakai PAM untuk kata sandi (dulu ChallengeResponseAuthentication). |
PermitRootLogin | no | Root tidak bisa masuk lewat SSH, dengan kunci sekalipun; gunakan sudo. |
AllowUsers | login Anda | Pengguna yang tidak terdaftar ditolak sebelum autentikasi; [email protected]/24 mengikat seorang pengguna ke satu jaringan. |
MaxAuthTries | 3 | Tiga percobaan gagal per koneksi, lalu diputus. |
LoginGraceTime | 30 | Koneksi yang belum terautentikasi diputus setelah 30 detik. |
ClientAliveInterval / ClientAliveCountMax | 300 / 2 | Menyelidiki klien yang diam setiap lima menit dan memutusnya setelah dua sondir tanpa jawaban; klien yang aktif menjawab otomatis. |
X11Forwarding | no | Nonaktif kecuali Anda meneruskan aplikasi grafis. |
Keepalive juga punya sisi klien: ServerAliveInterval 60 di ~/.ssh/config pada mesin Anda mencegah router NAT memutus sesi yang menganggur.
Mengganti port SSH bukanlah keamanan
Memindahkan sshd dari port 22 adalah saran yang populer. Yang Anda dapat hanyalah lebih sedikit baris log. Pemindai massal menyapu seluruh 65.535 port dan menemukan sshd di 2222 dalam hitungan jam; siapa pun yang menargetkan Anda menemukannya dalam hitungan detik dengan nmap. Kunci, larangan login root, daftar izin, dan fail2ban adalah keamanannya; port hanyalah kosmetik. Di server yang sibuk hal itu tetap membantu menjaga log autentikasi tetap terbaca, hanya saja jangan pernah menganggapnya sebagai lapisan pertahanan.
Jika tetap ingin menggantinya, ikuti urutan ini: buka port baru di UFW, ubah port-nya, mulai ulang, uji dari terminal kedua, lalu hapus aturan lama. Hilangkan tanda komentar pada #Port 22 di /etc/ssh/sshd_config, tetapkan port barunya, lalu:
sudo ufw allow 2222/tcp
sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket # Ubuntu 22.10 and later
sudo systemctl restart ssh # Ubuntu 22.04 and earlierPada rilis dengan aktivasi socket, unit socket-lah (bukan sshd) yang menentukan port mana yang diikat; Ubuntu menyertakan generator systemd yang membaca Port dari konfigurasi sshd saat daemon-reload lalu memperbarui ssh.socket. Pastikan dengan sudo ss -tlnp | grep sshd. Panduan tentang cara memeriksa port terbuka di Linux menjelaskan keluarannya. Jika sshd tetap keras kepala di port 22, matikan aktivasi socket dan biarkan layanan mengikat port itu sendiri: sudo systemctl disable --now ssh.socket && sudo systemctl enable --now ssh.service. Setelah ssh -p 2222 berhasil dari terminal baru, jalankan sudo ufw delete allow OpenSSH.
Tambahkan fail2ban, dan pertimbangkan autentikasi dua faktor
Dengan kata sandi dimatikan, brute force tidak mungkin berhasil, tetapi setiap percobaan tetap memakan satu fork dan satu baris log. fail2ban mengawasi log autentikasi dan memblokir alamat yang berulang kali gagal:
sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.localMasukkan ini ke dalam berkasnya:
[sshd]
enabled = true
port = ssh
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1hsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshdJangan pernah menyunting jail.conf; berkas itu diganti saat pembaruan dan jail.local menimpanya. port = ssh diterjemahkan lewat /etc/services, jadi tulis port = 2222 bila Anda memindahkan daemon-nya. backend = systemd membaca journal secara langsung dan tetap bekerja baik image Anda menulis /var/log/auth.log maupun tidak. fail2ban-client status sshd menampilkan alamat yang diblokir; sudo fail2ban-client set sshd unbanip 203.0.113.7 membebaskan satu alamat. Secara bawaan aturan fail2ban dievaluasi sebelum aturan UFW, sehingga keduanya bisa berdampingan.
Autentikasi dua faktor
Bila kunci plus passphrase belum cukup, libpam-google-authenticator menambahkan kode berbasis waktu di atas kunci: pasang paketnya, jalankan google-authenticator sebagai pengguna login, tambahkan auth required pam_google_authenticator.so ke /etc/pam.d/sshd (dan beri komentar pada baris @include common-auth), lalu atur KbdInteractiveAuthentication yes dan AuthenticationMethods publickey,keyboard-interactive pada sshd. Keuntungan nyata bila laptop dicuri, sekaligus satu hal lagi yang bisa hilang: simpan kode cadangan di luar server.
Pemecahan masalah: connection refused, timed out, permission denied
Connection refused
Server menjawab tetapi tidak ada yang mendengarkan di port itu: sshd berhenti, terikat di tempat lain, atau Anda salah mengetik port. Dari konsol penyedia, jalankan systemctl status ssh dan sudo ss -tlnp | grep ssh. Kesalahan sintaks membuat sshd sama sekali tidak mau start; sudo sshd -t mencetak baris yang bermasalah dan journalctl -u ssh -n 50 menampilkan start terakhir.
Connection timed out
Paket dibuang, bukan ditolak, dan itu hampir selalu berarti firewall: UFW tanpa aturan izin (sudo ufw status verbose), security group di panel penyedia, atau jaringan Anda sendiri yang memblokir port 22 keluar. Hotspot ponsel bisa membuktikannya. ssh -v username@SERVER_IP menunjukkan di mana handshake tersendat.
Permission denied (publickey)
Server dapat dijangkau tetapi menolak Anda. Periksa berurutan: nama pengguna, apakah authorized_keys milik pengguna itu memuat kunci yang Anda tawarkan (ssh -i ~/.ssh/id_ed25519 -v memaksa kunci tertentu), hak akses pada ~/.ssh, dan apakah login tersebut tidak tercantum di AllowUsers. Di server, journalctl -u ssh -n 30 menyebutkan alasannya; Authentication refused: bad ownership or modes adalah masalah hak akses yang dijelaskan sebelumnya.
Peringatan host key
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED setelah pembangunan ulang adalah hal yang wajar: jalankan ssh-keygen -R SERVER_IP lalu sambung kembali. Jika Anda tidak memasang ulang apa pun, cari tahu penyebabnya sebelum mengetik kata sandi di mana pun. Terkunci sepenuhnya? Konsol penyedia adalah jalan masuk kembali.
Semua di atas mengandaikan mesin yang aksesnya root milik Anda dan boleh saja sshd-nya rusak lalu diperbaiki dari konsol. VPS Linux dari rdp.monster persis mesin seperti itu: akses root penuh, CPU dan RAM khusus, bandwidth tidak terbatas (fair-use), tanpa KYC, pembayaran dengan kripto atau fiat, mulai $8.99 per bulan, dan server online sekitar 10 detik setelah pembayaran dikonfirmasi, cukup waktu untuk memasang kunci sebelum pemindai pertama menemukan port 22.
Pertanyaan yang sering ditanyakan
Apakah Ubuntu sudah mengaktifkan SSH secara bawaan?
sudo apt install openssh-server. Ubuntu Server menanyakan saat instalasi apakah server OpenSSH perlu dipasang dan sekaligus dapat mengimpor kunci GitHub atau Launchpad Anda. Image cloud dan VPS hampir selalu sudah memasang openssh-server, mengaktifkannya, dan menerima koneksi, karena hanya begitulah penyedia dapat menyerahkan mesin kepada Anda. Periksa dengan systemctl status ssh.Bagaimana cara memeriksa apakah SSH berjalan di Ubuntu?
systemctl status ssh memberi tahu apakah layanannya aktif atau di-enable. Karena Ubuntu 22.10 ke atas memakai aktivasi socket, layanan itu bisa saja secara sah menampilkan inactive (dead) dengan TriggeredBy: ssh.socket ketika tidak ada yang tersambung, sehingga pengujian yang lebih andal adalah sudo ss -tlnp | grep ssh: baris yang menampilkan 0.0.0.0:22 atau [::]:22 berarti SSH sedang mendengarkan. Dari mesin lain, ssh -v username@SERVER_IP memastikannya dari ujung ke ujung.Amankah membiarkan SSH di port 22?
PasswordAuthentication no dan pasangan kunci, dan fail2ban menghapus sebagian besar keramaiannya. Memindahkan sshd ke 2222 atau 22222 hanya menyembunyikannya dari pemindai yang paling malas; pemindai port seperti nmap dan masscan menemukannya dalam hitungan menit, dan indeks berskala internet tetap mencatatnya. Perlakukan port non-standar sebagai langkah kebersihan log, bukan kontrol keamanan, dan jangan pernah melewatkan kunci hanya karena Anda mengganti port.Apa beda ssh dan sshd di Ubuntu?
ssh adalah klien yang Anda jalankan di laptop untuk membuka koneksi; berasal dari paket openssh-client. sshd adalah daemon yang menjawab di server, dari openssh-server, dikonfigurasi di /etc/ssh/sshd_config (klien membaca ssh_config). Ubuntu dan Debian menamai unit systemd-nya ssh.service dan mendeklarasikan sshd.service sebagai alias, jadi systemctl restart ssh dan systemctl restart sshd melakukan hal yang sama; di Fedora, RHEL, dan Arch unitnya cukup sshd.Adrien Roche, Editor Infrastruktur & Hosting
Insinyur sistem yang sudah 10+ tahun mengelola server Windows Server dan Linux. Adrien mengurus dokumentasi infrastruktur rdp.monster dan menulis panduan kami tentang RDP, hosting VPS, administrasi server, jaringan, dan tool privasi.




