SSH Passwordless Login là cơ chế đăng nhập SSH không cần nhập mật khẩu, thay vào đó dùng cặp khóa mã hóa để xác thực người dùng với máy chủ từ xa. Trong bài viết này, mình sẽ hướng dẫn bạn các thiết lập SSH Passwordless Login chi tiết từng bước trên Linux.
Những điểm chính
- Định nghĩa SSH Passwordless Login: Hiểu rõ khái niệm và cơ chế hoạt động của việc đăng nhập SSH không cần mật khẩu.
- Lợi ích khi thiết lập: Nắm được các lợi ích vượt trội về bảo mật, sự tiện lợi và khả năng tự động hóa so với phương pháp dùng mật khẩu.
- Quy trình thiết lập: Thành thạo quy trình các bước để tạo SSH Key, cập nhật lên máy chủ và vô hiệu hóa xác thực bằng mật khẩu một cách an toàn.
- Lưu ý khi thiết lập: Nắm được các lưu ý quan trọng để đảm bảo quá trình thiết lập thành công, từ việc đặt đúng quyền truy cập đến bảo mật private key.
- Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề nâng cao như nên chọn loại SSH key nào, có nên đặt passphrase và cách quản lý nhiều key trong môi trường lớn.
SSH Passwordless Login là gì?
SSH Passwordless Login (hay đăng nhập SSH không cần mật khẩu) là phương thức xác thực nâng cao, cho phép quản trị viên truy cập vào máy chủ từ xa thông qua cơ chế cặp khóa mã hóa (Public/Private Key Pair) thay vì sử dụng mật khẩu truyền thống. Cơ chế hoạt động của phương pháp như sau:
- Tạo cặp khóa: Tạo một private key (khóa riêng) được lưu trên máy local và một public key (khóa công khai) được đặt trên server
- Lưu public key trên server: Public key được thêm vào file
~/.ssh/authorized_keystrên máy chủ từ xa - Xác thực: Khi đăng nhập, SSH client sử dụng private key để tạo chữ ký số, sau đó server xác minh chữ ký này bằng public key. Nếu khớp, bạn được cấp quyền truy cập mà không cần mật khẩu

Lợi ích khi thiết lập SSH Passwordless Login
Việc sử dụng SSH Key thay cho mật khẩu mang lại nhiều lợi ích cho quản trị viên hệ thống:
- Bảo mật vượt trội: Phương pháp này giúp chống lại các cuộc tấn công Brute-force bằng cách sử dụng các thuật toán mã hóa mạnh như RSA, ECDSA hoặc ED25519.
- Tiện lợi và dễ sử dụng: Bạn không cần nhập mật khẩu mỗi lần đăng nhập, chỉ cần chạy lệnh ssh user@server. Cách này giúp bạn đăng nhập nhanh và tiết kiệm thời gian so với phương pháp xác thực mật khẩu truyền thống.
- Tự động hóa và tích hợp DevOps: Đây là nền tảng để chạy các script tự động hóa như Ansible, Jenkins, Bash script,… giữa các server, giúp tiết kiệm thời gian đáng kể bằng cách loại bỏ nhu cầu gõ lệnh SSH thủ công, giảm lỗi con người, đảm bảo kết quả đáng tin cậy và nhất quán.
- Quản lý truy cập và kiểm toán: Bạn có thể dễ dàng quản lý SSH keys cho tự động hóa, giảm nhu cầu chia sẻ hoặc hard-code mật khẩu trong script. Mỗi user có SSH key riêng và có thể quản lý public keys trên server để kiểm soát quyền truy cập.

Quy trình thiết lập SSH Passwordless Login
Bước 1: Khởi tạo SSH Key trên máy cá nhân
Tại máy Local, bạn mở cửa sổ dòng lệnh và thực hiện tạo SSH Key bằng lệnh sau:
ssh-keygen -t rsaChú thích:
- ssh-keygen: Công cụ quản lý khóa SSH.
- -t rsa: Chỉ định loại thuật toán mã hóa là RSA.
Hệ thống sẽ hỏi nơi lưu file và mật khẩu bảo vệ khóa (passphrase). Bạn có thể nhấn Enter liên tục để chọn thiết lập mặc định (không đặt mật khẩu cho khóa). Kết quả hiển thị như sau:

Bước 2: Sao chép Public Key lên máy chủ
Sau đó, bạn thực hiện cập nhật public key vừa tạo vào máy remote bằng lệnh sau:
ssh-copy-id user@host Trong đó:
- ssh-copy-id : Dòng lệnh được sử dụng để sao chép public key và máy muốn SSH bằng key.
- user: Tên người dùng bạn muốn SSH
- Host: Địa chỉ IP hoặc domain của máy bạn muốn SSH.
Nếu bạn sử dụng Windows hoặc lệnh trên không hoạt động, bạn hãy dùng câu lệnh sau để chép nội dung Public Key vào file authorized_keys trên máy chủ:
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Bước 3: Thiết lập phân quyền
Để đảm bảo SSH hoạt động, bạn cần thiết lập quyền chính xác cho thư mục .ssh trên máy chủ. Bạn chạy lệnh sau từ máy Local:
ssh-copy-id user@host "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"Chú thích:
- chmod 700 ~/.ssh: Chỉ chủ sở hữu có quyền đọc/ghi/thực thi thư mục cấu hình.
- chmod 600 …/authorized_keys: Chỉ chủ sở hữu có quyền đọc/ghi file chứa key.
Bước 4: Vô hiệu hóa xác thực bằng mật khẩu
Sau khi đã đăng nhập được bằng Key, bạn nên tắt tính năng đăng nhập bằng mật khẩu để ngăn chặn hacker tấn công brute-force.
Bạn mở file cấu hình SSH trên máy chủ bằng lệnh sau:
sudo vi /etc/ssh/sshd_configSau đó bạn tìm và sửa hoặc bỏ dấu # nếu bị comment các dòng sau để khớp với cấu hình:
# Cho phép đăng nhập bằng Key
PubkeyAuthentication yes
# Tắt đăng nhập bằng Mật khẩu
PasswordAuthentication noBước 5: Kiểm tra kết nối không cần mật khẩu
Để áp dụng cấu hình mới, bạn cần restart service sshd trên máy chủ:
sudo systemctl restart sshdTừ máy Local, bạn hãy thử kết nối lại. Nếu thành công, bạn sẽ truy cập thẳng vào server mà không cần nhập mật khẩu.
ssh user@host
Lưu ý khi thiết lập SSH Passwordless Login trên Linux
Để đảm bảo an toàn tuyệt đối và tránh lỗi trong quá trình sử dụng, bạn cần chú ý các điểm sau:
- Kiểm tra và đặt đúng quyền truy cập thư mục: Thư mục ~/.ssh thường yêu cầu quyền 700, do đó bạn hãy sử dụng lệnh
chmod 700 ~/.ssh - Đặt quyền đúng cho file authorized_keys: File
~/.ssh/authorized_keyscần có quyền 600, do đó bạn hãy sử dụng lệnhchmod 600 ~/.ssh/authorized_keys. - Đặt quyền đúng cho private key: Private key phải có quyền 400 hoặc 600, nếu quyền quá mở, SSH sẽ từ chối kết nối với thông báo “
permissions are too open“. - Không chia sẻ private key: Private key phải được giữ bí mật trên máy local của bạn và chỉ public key được gửi đến server.
- Tạo SSH directory nếu chưa tồn tại: Trước khi dán public key vào authorized_keys, bạn hãy đảm bảo thư mục ~/.ssh đã tồn tại trên server.
- Bảo mật SSH server config: Bạn cần đảm bảo rằng các thiết lập bảo mật khác trong /etc/ssh/sshd_config đang bật, như PubkeyAuthentication yes, PermitRootLogin prohibit-password để ngăn root login trực tiếp.
- Sử dụng tên key có ý nghĩa: Khi tạo SSH keys, hãy đặt tên có ý nghĩa để dễ dàng quản lý nhiều keys cho nhiều server khác nhau.
- Cấp quyền truy cập hạn chế cho script tự động hóa: Nếu bạn sử dụng SSH keys cho script tự động hóa, hãy tạo một user riêng với quyền hạn chế và dùng key chỉ cho user đó.

Câu hỏi thường gặp
Nên chọn loại SSH key nào cho môi trường Linux hiện đại?
Trong đa số hệ thống hiện đại, ED25519 thường được khuyến nghị vì bảo mật tốt, key ngắn, hiệu năng cao và dễ quản lý hơn so với RSA dung lượng lớn. Tuy nhiên, RSA vẫn phổ biến do khả năng tương thích rộng, nhưng nên dùng tối thiểu 2048–3072 bit, trong khi ED25519 phù hợp với chuẩn trong giai đoạn hiện nay.
Có nên đặt passphrase cho private key khi dùng SSH Passwordless Login không?
Đặt passphrase là cách thêm một lớp bảo vệ, giúp giảm rủi ro nếu private key bị đánh cắp vì kẻ tấn công vẫn phải vượt qua passphrase mới sử dụng được key. Tuy nhiên, với các kịch bản tự động hóa, nhiều bên chấp nhận dùng key không passphrase kết hợp giới hạn quyền user, IP, time hoặc dùng ssh-agent/agent-forwarding để vừa bảo mật vừa tiện dụng.
Làm sao quản lý và xoay vòng nhiều SSH key của nhiều user trên nhiều server?
Đối với môi trường lớn, nên dùng công cụ quản lý cấu hình/CM như Ansible, Puppet, Chef,… để phân phối, thu hồi và xoay vòng SSH keys theo lịch định kỳ. Một số tổ chức còn triển khai giải pháp quản lý SSH key chuyên dụng hoặc hệ thống IAM để tự động hóa quá trình cấp, thu hồi, gắn quyền theo nguyên tắc “least privilege”.
Trên đây là toàn bộ quy trình thiết lập SSH Passwordless Login trên Linux, giúp bạn đăng nhập nhanh hơn, an toàn hơn và dễ dàng tích hợp vào các quy trình tự động hóa quản trị hệ thống hằng ngày. Khi triển khai đúng cách, cơ chế xác thực bằng SSH key sẽ trở thành lớp bảo vệ tiêu chuẩn cho hạ tầng server của bạn trước các hình thức tấn công phổ biến từ bên ngoài. Chúc bạn thao tác thành công và hẹn gặp lại bạn trong các bài viết tiếp theo.




