RDP Monster

Mengaktifkan SSH di Ubuntu: Pasang OpenSSH dan Amankan

Mengaktifkan SSH di Ubuntu: Pasang OpenSSH dan Amankan

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-server

Jika 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 ssh

Di 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 status

ufw 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 ssh tidak dikenali, tambahkan lewat Settings > Apps > Optional features.
  • macOS: Terminal, perintah yang sama.
  • Linux: terminal apa pun; openssh-client terpasang 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_IP

Build 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.conf

Tempelkan 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 2

PermitRootLogin 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:

DirektifNilaiEfek
PasswordAuthenticationnoHanya kunci; brute force kata sandi menjadi mustahil, bukan sekadar lambat.
KbdInteractiveAuthenticationnoMenutup jalur challenge-response yang bisa dipakai PAM untuk kata sandi (dulu ChallengeResponseAuthentication).
PermitRootLoginnoRoot tidak bisa masuk lewat SSH, dengan kunci sekalipun; gunakan sudo.
AllowUserslogin AndaPengguna yang tidak terdaftar ditolak sebelum autentikasi; [email protected]/24 mengikat seorang pengguna ke satu jaringan.
MaxAuthTries3Tiga percobaan gagal per koneksi, lalu diputus.
LoginGraceTime30Koneksi yang belum terautentikasi diputus setelah 30 detik.
ClientAliveInterval / ClientAliveCountMax300 / 2Menyelidiki klien yang diam setiap lima menit dan memutusnya setelah dua sondir tanpa jawaban; klien yang aktif menjawab otomatis.
X11ForwardingnoNonaktif 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 earlier

Pada 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.local

Masukkan ini ke dalam berkasnya:

[sshd]
enabled = true
port = ssh
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Jangan 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?

Ubuntu Desktop tidak; Ubuntu Server dan sebagian besar image cloud ya.
Ubuntu Desktop hanya memasang klien SSH, jadi tidak ada yang mendengarkan di port 22 sampai Anda menjalankan 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?

Jalankan systemctl status ssh, lalu pastikan port 22 mendengarkan dengan ss.
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?

Ya, asalkan kata sandi dimatikan dan kunci digunakan; nomor port tidak menambah perlindungan.
Port 22 menarik upaya login otomatis tanpa henti, tetapi upaya itu tidak mungkin berhasil pada server dengan 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 program klien; sshd adalah daemon server, yang unit Ubuntu-nya bernama ssh dengan sshd sebagai alias.
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.

Gabung program reseller kami

Data Anda

Jika Anda punya pertanyaan, klik di sini untuk menghubungi kami !
Nama(Wajib)
Masukkan alamat email Anda, pastikan Anda sudah punya akun di manager.rdp.monster !

Perusahaan Anda

Masukkan alamat situs web Anda jika ada
Ceritakan singkat cara Anda menjual layanan ke pelanggan. Misalnya, lewat obrolan di forum.

Bahkan monster pun suka cookie!

Kami memakai cookie agar penjelajahan Anda lebih nyaman, untuk menampilkan iklan atau konten yang dipersonalisasi, dan untuk menganalisis lalu lintas kami. Dengan mengklik “Terima”, Anda menyetujui penggunaan cookie oleh kami.