Lewati ke isi

Keamanan/Cyber Security

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.

Terbit 5 menit baca

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
  1. Apa yang perlu disiapkan?
  2. Langkah pemasangan 2FA SSH
  3. Langkah 1: Pasang modul PAM
  4. Langkah 2: Buat kunci rahasia untuk pengguna
  5. Langkah 3: Tambahkan modul ke PAM SSH
  6. Langkah 4: Ubah konfigurasi SSH
  7. Langkah 5: Uji konfigurasi lalu restart SSH
  8. Langkah 6: Uji dari terminal baru
  9. Bagaimana kalau ada pengguna lain yang belum memasang OTP?
  10. Bagaimana dengan skrip otomatis dan deploy?
  11. Pertanyaan yang sering diajukan
  12. 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 baris System 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:

PertanyaanJawabanAlasan
Make tokens time-based?yMemakai TOTP, kode berganti tiap 30 detik
Update the .google_authenticator file?yMenyimpan rahasia ke ~/.google_authenticator
Disallow multiple uses of the same token?ySatu kode hanya bisa dipakai sekali
Increase the time window?nJendela waktu tetap sempit, lebih aman
Enable rate-limiting?yMembatasi 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-authenticator dijalankan untuk setiap pengguna yang login.
  • Emergency scratch code tersimpan di tempat aman.
  • Baris pam_google_authenticator.so ada di /etc/pam.d/sshd.
  • /etc/ssh/sshd_config.d/10-2fa.conf berisi AuthenticationMethods publickey,keyboard-interactive.
  • sshd -t bersih, layanan ssh sudah di-restart, dan login diuji dari terminal baru.

Sumber & referensi

Baca juga