Hướng Dẫn Cấu Hình SSH Với Google Authenticator Trên Linux

Việc bảo mật SSH chỉ với mật khẩu (password) không còn an toàn trong thời đại ngày nay. Tin tặc có thể dò mật khẩu (brute-force) hoặc khai thác lỗ hổng để truy cập trái phép vào hệ thống của bạn. Vì vậy, giải pháp xác thực hai yếu tố (2FA – Two-Factor Authentication) là lựa chọn hiệu quả để tăng cường bảo mật.

Trong bài viết này, chúng ta sẽ tìm hiểu cách cấu hình SSH kết hợp Google Authenticator trên Linux (ví dụ CentOS, Rocky Linux hoặc RHEL). Sau khi hoàn thành, khi đăng nhập SSH bạn sẽ cần nhập mã OTP (TOTP) trên ứng dụng Google Authenticator ngoài mật khẩu SSH.

1. Cài đặt gói cần thiết

Đầu tiên, hãy cài đặt các gói hỗ trợ Google Authenticator và đồng bộ thời gian (TOTP phụ thuộc chính xác vào đồng hồ hệ thống):

sudo dnf install -y epel-release
sudo dnf install -y google-authenticator qrencode
sudo dnf install -y chrony
sudo systemctl enable --now chronyd
  • epel-release: Bật repo EPEL để cài các gói bổ sung.

  • google-authenticator: Gói PAM plugin để tạo và kiểm tra mã OTP.

  • qrencode: Dùng để hiển thị QR code ngay trên terminal.

  • chrony: Giữ cho hệ thống luôn đồng bộ thời gian (rất quan trọng với OTP).

2. Khởi tạo mã OTP cho user SSH

Tiếp theo, tạo secret key và QR code cho user root (hoặc user khác nếu bạn dùng để SSH):

sudo -u root -H bash -lc 'google-authenticator -t -d -f -r 3 -R 30 -W'

Giải thích các tùy chọn:

  • -t: Tạo mã theo cơ chế TOTP (thay đổi mỗi 30s).

  • -d: Chặn sử dụng lại mã OTP cũ.

  • -f: Tạo file cấu hình mới, ghi đè file cũ nếu có.

  • -r 3 -R 30: Giới hạn tối đa 3 lần thử trong 30 giây.

  • -W: Cho phép sử dụng mã “emergency scratch codes” trong trường hợp mất điện thoại.

Sau khi chạy lệnh, terminal sẽ hiển thị QR code và secret key. Bạn cần:
Mở ứng dụng Google Authenticator / Authy trên điện thoại → quét QR code → lưu tài khoản.

3. Cấu hình PAM cho SSH

Chỉnh sửa file PAM /etc/pam.d/sshd:

sudo nano /etc/pam.d/sshd

Thêm dòng sau vào đầu phần auth:

auth       required     pam_google_authenticator.so   #NEW
auth       substack     password-auth
auth       include      postlogin
account    required     pam_sepermit.so
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    optional     pam_motd.so
session    include      password-auth
session    include      postlogin

Lưu ý: Dòng pam_google_authenticator.so phải đứng trước password-auth để hệ thống yêu cầu OTP trước, rồi mới tới mật khẩu.

4. Cấu hình SSHD

Tiếp theo, cấu hình SSHD để kích hoạt PAM và xác thực OTP. Mở file:

sudo nano /etc/ssh/sshd_config

Thêm hoặc chỉnh sửa các dòng sau:

UsePAM yes
KbdInteractiveAuthentication yes
PasswordAuthentication yes
PubkeyAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods keyboard-interactive
  • UsePAM yes: Cho phép dùng PAM trong SSH.

  • KbdInteractiveAuthentication yes: Bật xác thực dạng “keyboard-interactive”.

  • PasswordAuthentication yes: Cho phép nhập mật khẩu Linux user.

  • AuthenticationMethods keyboard-interactive: Bắt buộc qua PAM → khi login sẽ cần OTP + password.

5. Kiểm tra và restart SSHD

Trước khi restart SSHD, hãy kiểm tra cú pháp để tránh khóa chính mình:

sudo sshd -t

Nếu không báo lỗi, restart dịch vụ:

sudo systemctl restart sshd

6. Test đăng nhập SSH

Giờ bạn thử SSH từ máy client:

ssh root@your-server-ip

Bạn sẽ thấy trình tự:

Verification code:
Password:

Nhập OTP từ Google Authenticator trước, sau đó nhập mật khẩu Linux. Nếu đúng, bạn sẽ vào được hệ thống.

Kết luận

Với các bước trên, bạn đã cấu hình thành công SSH kết hợp Google Authenticator để tăng cường bảo mật. Giờ đây, kẻ tấn công không thể chỉ dùng mật khẩu để đăng nhập nữa, mà còn cần điện thoại của bạn để lấy mã OTP.

Đây là một lớp bảo vệ cực kỳ quan trọng khi quản trị server. Bạn nên áp dụng ngay cho các máy chủ production hoặc VPS chứa dữ liệu nhạy cảm.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *