Cara Pasang 2FA untuk Login SSH di Ubuntu 24.04
Tambahkan kode OTP dari aplikasi authenticator ke login SSH Ubuntu 24.04 dengan modul PAM Google Authenticator, tanpa terkunci dari server sendiri.
Jawaban singkat
Pasang paket libpam-google-authenticator, jalankan google-authenticator sebagai pengguna yang login, tambahkan modul PAM ke /etc/pam.d/sshd, lalu aktifkan KbdInteractiveAuthentication dan AuthenticationMethods publickey,keyboard-interactive. Hasilnya, login SSH butuh SSH key dan kode OTP.
Daftar isi
- Apa yang perlu disiapkan?
- Langkah pemasangan 2FA SSH
- Langkah 1: Pasang modul PAM
- Langkah 2: Buat kunci rahasia untuk pengguna
- Langkah 3: Tambahkan modul ke PAM SSH
- Langkah 4: Ubah konfigurasi SSH
- Langkah 5: Uji konfigurasi lalu restart SSH
- Langkah 6: Uji dari terminal baru
- Bagaimana kalau ada pengguna lain yang belum memasang OTP?
- Bagaimana dengan skrip otomatis dan deploy?
- Pertanyaan yang sering diajukan
- Checklist sebelum selesai
Bagaimana kalau SSH key di laptopmu ikut tercuri bersama laptopnya? Di situlah 2FA (two-factor authentication) berguna. Dengan 2FA, login SSH ke Ubuntu 24.04 tidak cukup hanya dengan key atau password, tapi juga harus memasukkan kode 6 digit yang berganti setiap 30 detik dari aplikasi authenticator di HP.
Caranya memakai modul PAM libpam-google-authenticator yang tersedia di repositori resmi Ubuntu. Kodenya mengikuti standar TOTP, jadi bisa dibaca aplikasi apa pun yang mendukung TOTP, seperti Google Authenticator, Microsoft Authenticator, Aegis, atau 2FAS.
Apa yang perlu disiapkan?
- Server Ubuntu 24.04 dengan pengguna biasa yang punya hak
sudo(bukan login root langsung). - Login dengan SSH key sudah berjalan. Kalau belum, baca dulu kenapa SSH key lebih aman dari password.
- Aplikasi authenticator TOTP di HP.
- Jam server yang akurat. Cek dengan
timedatectl, pastikan barisSystem clock synchronized: yes. Kode TOTP berbasis waktu, jadi jam yang meleset beberapa menit membuat kode selalu ditolak.
Langkah pemasangan 2FA SSH
Langkah 1: Pasang modul PAM
sudo apt update
sudo apt install libpam-google-authenticator
Langkah 2: Buat kunci rahasia untuk pengguna
Jalankan perintah ini sebagai pengguna yang akan login, bukan dengan sudo, karena berkas rahasianya disimpan di folder home pengguna tersebut.
google-authenticator
Program akan menanyakan beberapa hal. Jawaban yang umum dianjurkan:
| Pertanyaan | Jawaban | Alasan |
|---|---|---|
| Make tokens time-based? | y | Memakai TOTP, kode berganti tiap 30 detik |
| Update the .google_authenticator file? | y | Menyimpan rahasia ke ~/.google_authenticator |
| Disallow multiple uses of the same token? | y | Satu kode hanya bisa dipakai sekali |
| Increase the time window? | n | Jendela waktu tetap sempit, lebih aman |
| Enable rate-limiting? | y | Membatasi percobaan login, bawaannya 3 kali per 30 detik |
Terminal akan menampilkan kode QR dan kunci rahasia. Pindai kode QR dengan aplikasi authenticator. Program juga menampilkan beberapa emergency scratch code: catat di tempat aman (misalnya pengelola password), karena kode ini satu-satunya jalan masuk kalau HP hilang.
Langkah 3: Tambahkan modul ke PAM SSH
Buka berkas PAM untuk SSH:
sudo nano /etc/pam.d/sshd
Tambahkan baris ini di bagian paling atas:
auth required pam_google_authenticator.so
Karena kita akan memakai kombinasi SSH key dan OTP, server tidak perlu menanyakan password lagi. Cari baris @include common-auth lalu beri tanda pagar di depannya:
# @include common-auth
Kalau baris ini dibiarkan aktif, server akan meminta password Linux setelah OTP. Itu tidak salah, hanya menjadi tiga lapis (key, OTP, password).
Langkah 4: Ubah konfigurasi SSH
Di Ubuntu 24.04, berkas tambahan di /etc/ssh/sshd_config.d/ dibaca lebih dulu daripada isi sshd_config utama, dan untuk sebagian besar opsi, nilai yang pertama dibaca yang berlaku. Karena itu, simpan pengaturan 2FA di berkas tersendiri dengan nama yang urut paling awal:
sudo nano /etc/ssh/sshd_config.d/10-2fa.conf
Isi dengan:
KbdInteractiveAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
KbdInteractiveAuthentication adalah nama baru untuk opsi lama ChallengeResponseAuthentication yang masih muncul di banyak tutorial lama. AuthenticationMethods publickey,keyboard-interactive berarti pengguna wajib lolos SSH key dulu, baru diminta kode OTP.
Langkah 5: Uji konfigurasi lalu restart SSH
sudo sshd -t
sudo systemctl restart ssh
Perintah sshd -t tidak menampilkan apa-apa bila konfigurasinya benar. Di Ubuntu 24.04 nama layanannya ssh, bukan sshd.
Langkah 6: Uji dari terminal baru
ssh pengguna@ip-server
Setelah key diterima, akan muncul Verification code:. Masukkan kode 6 digit dari aplikasi. Kalau berhasil masuk, 2FA sudah aktif. Baru setelah itu sesi cadangan boleh ditutup.
Bagaimana kalau ada pengguna lain yang belum memasang OTP?
Dengan konfigurasi di atas, pengguna yang belum menjalankan google-authenticator tidak akan bisa login sama sekali. Untuk masa transisi, kamu bisa menambahkan opsi nullok di baris PAM:
auth required pam_google_authenticator.so nullok
Opsi ini mengizinkan pengguna tanpa berkas ~/.google_authenticator login tanpa OTP. Hapus lagi nullok setelah semua pengguna selesai memasang, supaya tidak ada akun yang lolos tanpa lapisan kedua.
Bagaimana dengan skrip otomatis dan deploy?
Skrip backup, CI/CD, atau rsync terjadwal tidak bisa mengetik kode OTP. Solusi yang rapi adalah membuat pengguna khusus untuk otomasi dan membebaskannya dari OTP lewat blok Match. Letakkan blok ini di bagian paling bawah /etc/ssh/sshd_config, karena semua baris setelah Match hanya berlaku untuk pengguna yang cocok:
Match User deploy
AuthenticationMethods publickey
Batasi juga apa yang bisa dilakukan pengguna itu, misalnya dengan hak akses folder seminimal mungkin dan pembatasan IP di firewall. Langkah pengamanan dasar lainnya bisa kamu lihat di cara mengamankan VPS Linux baru.
Pertanyaan yang sering diajukan
HP saya hilang, bagaimana cara login?
Pakai salah satu emergency scratch code yang dicatat saat menjalankan google-authenticator. Setelah masuk, jalankan ulang google-authenticator untuk membuat rahasia baru dan pasang di HP pengganti.
Kode OTP selalu ditolak padahal sudah benar, kenapa?
Penyebab paling umum adalah jam server atau jam HP yang tidak sinkron. Cek timedatectl di server dan aktifkan waktu otomatis di HP. Pastikan juga kode tidak dipakai dua kali karena opsi disallow multiple uses.
Apakah 2FA menggantikan Fail2ban dan firewall?
Tidak. 2FA melindungi proses login, sedangkan Fail2ban dan firewall mengurangi jumlah percobaan yang sampai ke server. Ketiganya sebaiknya dipakai bersamaan.
Apakah bisa memakai 2FA dengan login password tanpa SSH key?
Bisa, dengan membiarkan @include common-auth aktif dan memakai AuthenticationMethods keyboard-interactive saja. Tetapi kombinasi SSH key dan OTP jauh lebih kuat dan lebih dianjurkan.
Checklist sebelum selesai
- Jam server tersinkron (
timedatectl). google-authenticatordijalankan untuk setiap pengguna yang login.- Emergency scratch code tersimpan di tempat aman.
- Baris
pam_google_authenticator.soada di/etc/pam.d/sshd. /etc/ssh/sshd_config.d/10-2fa.confberisiAuthenticationMethods publickey,keyboard-interactive.sshd -tbersih, layanansshsudah di-restart, dan login diuji dari terminal baru.


