SSH Key trong Linux là một cặp khóa dùng để xác thực an toàn giữa người dùng và máy chủ thông qua giao thức SSH. Trong bài viết này, mình sẽ cung cấp một hướng dẫn toàn diện gồm 5 bước đơn giản về cách tạo và quản lý SSH Key Linux, giúp bạn nâng cao an ninh cho hệ thống của mình.
Những điểm chính
- Định nghĩa SSH Key: Nắm vững khái niệm SSH Key, cơ chế hoạt động của cặp khóa công khai – riêng tư để xác thực không cần mật khẩu.
- Những lợi ích khi sử dụng SSH Key: Nhận biết các lợi ích vượt trội về bảo mật và hiệu quả quản trị so với mật khẩu truyền thống.
- 5 bước tạo SSH trên Linux: Thành thạo quy trình 5 bước để tự tạo một cặp SSH Key an toàn bằng lệnh ssh-keygen.
- Lưu ý quan trọng: Biết được các lưu ý quan trọng để bảo mật khóa riêng tư và cấu hình máy chủ an toàn.
- Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề nâng cao khi tạo SSH Key
SSH Key là gì?
SSH Key là một phương thức xác thực danh tính người dùng khi truy cập vào máy chủ từ xa thay thế cho mật khẩu truyền thống. Phương thức này hoạt động dựa trên mô hình mã hóa bất đối xứng, sử dụng một cặp khóa mật mã để thiết lập kết nối an toàn. Một cặp SSH Key luôn bao gồm hai thành phần:
- Public Key: Là một chuỗi ký tự dài được đặt trên máy chủ mà bạn muốn truy cập, có thể chia sẻ công khai.
- Private Key: Là một chuỗi ký tự dài được lưu trữ an toàn trên máy tính cá nhân của bạn và bạn tuyệt đối không được chia sẻ với bất kỳ ai.
Lưu ý
Private Key là thông tin tuyệt đối bảo mật. Nếu để lộ file này, kẻ gian có thể xâm nhập vào hệ thống của bạn mà không cần mật khẩu.
Khi bạn cố gắng kết nối SSH tới máy chủ:
- Máy client gửi yêu cầu kết nối kèm theo thông tin về khóa công khai của bạn.
- Máy chủ sẽ tìm khóa công khai tương ứng trong file authorized_keys.
- Nếu tìm thấy, máy chủ sẽ tạo ra một thử thách được mã hóa bằng khóa công khai.
- Máy client sử dụng khóa riêng tư để giải mã thử thách và gửi lại cho máy chủ.
- Nếu quá trình giải mã thành công (nghĩa là khóa riêng tư khớp với khóa công khai), máy chủ sẽ cho phép kết nối mà không cần mật khẩu.

Những lợi ích khi sử dụng SSH Key Linux
Nâng cao tính bảo mật
- Ngăn chặn tấn công Brute-force: SSH Key loại bỏ nguy cơ từ các cuộc tấn công Brute-force do cấu trúc khóa không dựa trên các cụm từ có ý nghĩa mà là các dữ liệu mã hóa ngẫu nhiên, khiến việc dò tìm khóa là bất khả thi về mặt toán học.
- Độ phức tạp mã hóa cao: Một SSH Key thường được tạo bởi các thuật toán mã hóa mạnh như RSA 2048-bit hoặc ED25519 với độ dài và độ ngẫu nhiên lớn hơn nhiều so với bất kỳ mật khẩu văn bản thông thường, đảm bảo tính an toàn trước các nỗ lực bẻ khóa.
- Giảm thiểu bề mặt tấn công: Khi sử dụng SSH Key, quản trị viên có thể cấu hình vô hiệu hóa hoàn toàn tính năng xác thực bằng mật khẩu trên máy chủ. Điều này ngăn chặn triệt để các truy cập trái phép lợi dụng lỗ hổng mật khẩu yếu hoặc mật khẩu bị lộ.

Cải thiện hiệu quả quản trị
- Loại bỏ thao tác nhập liệu thủ công: Giao thức thực hiện xác thực tự động thông qua việc đối chiếu cặp khóa giúp loại bỏ bước nhập mật khẩu mỗi khi thiết lập kết nối, rút ngắn thời gian truy cập.
- Hỗ trợ quy trình tự động hóa: SSH Key là thành phần thiết yếu để vận hành các scripts tự động hoặc các quy trình tích hợp liên tục (CI/CD), cho phép các tác vụ nền kết nối đến máy chủ mà không cần sự tương tác trực tiếp của người dùng.
- Quản lý truy cập phi tập trung: Việc cấp phát hoặc thu hồi quyền truy cập được thực hiện độc lập trên từng Public Key nên bạn có thể xóa key của một cá nhân cụ thể mà không cần thay đổi mật khẩu root hay ảnh hưởng đến quyền truy cập của các thành viên khác trong hệ thống.
5 bước tạo SSH trên Linux sử dụng ssh-keygen
Bước 1: Đầu tiên, bạn mở terminal và gõ lệnh tạo key:
ssh-keygen -t rsaBước 2: Tiếp theo, bạn cần lựa chọn loại thuật toán, độ dài bit của khóa, hoặc bổ sung ghi chú nhận diện key thông qua các tuỳ chọn dòng lệnh:
Thông thường, lựa chọn option -t sẽ giúp bạn xác định thuật toán tạo key, ví dụ như RSA. Nếu bạn không thêm option -t và chỉ định thuật toán khi sử dụng ssh-keygen trên các bản phân phối Linux mới, mặc định công cụ sẽ tạo key bằng thuật toán id_ed25519.
Tuy nhiên, RSA vẫn là thuật toán mã hóa thông dụng nhất, được sử dụng rộng rãi trong nhiều hệ thống và ứng dụng hiện nay.
Bước 3: Bạn chọn hoặc xác nhận đường dẫn lưu file key:
Khi thông báo “Enter file in which to save the key (/home/username/.ssh/id_rsa)” xuất hiện, bạn nhấn Enter để lưu vào đường dẫn mặc định hoặc nhập tên file riêng nếu muốn tạo tên hoặc trong đường dẫn khác.
Bước 4: Chọn đặt passphrase bảo vệ:
Khi thông báo “Enter passphrase (empty for no passphrase)” xuất hiện, bạn có thể nhấn Enter để bỏ qua hoặc có thể nhập passphrase để tăng bảo mật.
Bước 5: Bạn kiểm tra vị trí lưu file private và public key trong thư mục ~/.ssh:
- Đối với file private key: ~/.ssh/id_rsa
- Đối với File public key: ~/.ssh/id_rsa.pub

Khi tạo khóa bằng ssh-keygen, thuật toán RSA mặc định sẽ sử dụng độ dài 2048 hoặc 3072 bit (tùy phiên bản OpenSSH). Bạn có thể chủ động chỉ định độ dài khóa bằng tùy chọn -b:
ssh-keygen -t rsa -b 4096Ngoài ra, để dễ nhận diện khóa, bạn có thể thêm nhãn mô tả bằng tùy chọn -C, ví dụ địa chỉ email:
ssh-keygen -t rsa -b 4096 -C test@gmail.comSau khi chạy lệnh, hệ thống sẽ hiển thị thông tin kết quả (output) của quá trình tạo khóa.

Lưu ý quan trọng khi tạo SSH Key
- Bảo mật khóa riêng: Bạn cần giữ khóa riêng tư an toàn và bảo đảm quyền truy cập file chỉ cho phép người dùng nhất định, tránh để lộ ra ngoài.
- Đưa khóa công khai lên server: Bạn sao chép nội dung khóa công khai vào file authorized_keys trên server, cho phép xác thực không cần mật khẩu.
- Cấu hình server SSH an toàn: Thay đổi cổng mặc định của bạn, đồng thời tắt đăng nhập trực tiếp bằng root, sử dụng firewall và giới hạn IP truy cập.
- Kiểm tra và thiết lập quyền cho thư mục .ssh: Bạn cần đảm bảo quyền truy cập đúng (600 hoặc 700) để tránh lỗi và tăng tính bảo mật.
- Sao lưu khóa và phương án dự phòng: Luôn có bản sao khóa riêng tư để tránh mất quyền truy cập.

Câu hỏi thường gặp
SSH Key nên chọn thuật toán nào là tối ưu cho hệ thống hiện đại?
Thuật toán ED25519 được xem là lựa chọn tối ưu trên các hệ thống hiện đại nhờ hiệu năng ký, xác thực vượt trội và khả năng chống lại nhiều dạng tấn công mật mã mới, với độ dài key mặc định 256-bit nhưng có độ mạnh tương đương RSA 3072-bit.
Nên xử lý thế nào nếu lỡ để lộ private key SSH?
Khi phát hiện private key bị lộ, cần lập tức loại bỏ khóa công khai tương ứng khỏi file authorized_keys trên tất cả server mà key này từng được sử dụng, đồng thời tạo cặp key mới hoàn toàn. Đối với môi trường lớn, bạn nên truy vết log SSH để phát hiện dấu hiệu truy cập trái phép.
RSA 2048-bit là gì?
RSA 2048-bit là cặp khóa được sinh ra bởi thuật toán mã hóa bất đối xứng RSA với độ dài khóa là 2048 bit. Độ dài này thể hiện mức độ phức tạp về mặt toán học, tạo ra hàng tỷ tỷ tổ hợp khác nhau, khiến kẻ tấn công rất khó giải mã nếu không có private key. Đây là mức tối thiểu được khuyến nghị bởi nhiều tổ chức bảo mật.
Lệnh ssh-keygen tạo RSA nên chọn 2048 hay 4096 bit?
Theo khuyến nghị bảo mật hiện đại, độ dài 4096 bit mang lại mức bảo vệ cao hơn so với 2048 bit. Điều này đồng nghĩa với việc khóa RSA 4096 bit khó bị bẻ khóa bằng các phương pháp tấn công brute-force hiện nay, thích hợp cho môi trường yêu cầu bảo mật tối đa. Tuy nhiên, RSA 2048 vẫn đạt chuẩn an toàn cho số đông hệ thống hiện tại và có ưu điểm tạo/làm việc với key nhanh hơn RSA 4096.
ED25519 có tốt hơn RSA 4096 không?
ED25519 là thuật toán mã hóa đường cong elliptic hiện đại, ra đời sau RSA và được đánh giá cao về cả tốc độ và an toàn. Ưu điểm vượt trội của ED25519:
– Kích thước khóa nhỏ hơn, tốc độ ký/xác thực nhanh gấp nhiều lần RSA kể cả khi so với RSA 4096 bit.
– Độ bảo mật tương đương, thậm chí cao hơn RSA 4096, khó bị tổ chức hoặc cá nhân nào bẻ khóa bằng kỹ thuật hiện tại.
– Miễn nhiễm với nhiều loại tấn công side-channel và brute-force hiện nay.
SSH Key Linux là giải pháp xác thực bảo mật tối ưu dành cho người dùng và quản trị hệ thống Linux hiện đại. Việc sử dụng các thuật toán mạnh như RSA 4096 hoặc ED25519 sẽ giúp bạn bảo vệ hệ thống khỏi nguy cơ xâm nhập trái phép và các dạng tấn công phổ biến hiện nay. Chúc bạn tạo SSH Key Linux thành công và hẹn gặp lại bạn trong các bài viết tiếp theo của mình.




