Xác thực SSH Key từ cơ bản đến nâng cao: Ed25519, SSH Config và Bảo mật đa tầng
Cẩm nang toàn diện về xác thực SSH Key trên máy chủ Linux: So sánh Ed25519 vs RSA, cấu hình SSH Config quản lí hàng chục VPS, chuyển tiếp Agent Forwarding, và các qui tắc bảo mật chống lộ khóa.

Giới thiệu: Tại sao mật khẩu truyền thống không còn an toàn?
Giao thức SSH (Secure Shell) là cánh cổng chính để các kĩ sư hệ thống truy cập và quản lí các máy chủ Linux từ xa. Tuy nhiên, phương thức đăng nhập bằng mật khẩu (Password-based Authentication) tiềm ẩn nhiều rủi ro nghiêm trọng:
- Dễ bị tấn công vét cạn (Brute-force) và tấn công từ điển (Dictionary Attack) bởi hàng triệu botnet tự động quét Internet mỗi ngày.
- Người dùng có xu hướng đặt mật khẩu dễ nhớ hoặc tái sử dụng mật khẩu trên nhiều máy chủ.
- Rủi ro bị nghe lén hoặc ghi lại bàn phím (Keylogger) trên máy khách.
Phương thức xác thực bằng Cặp khóa bất đối xứng (SSH Key Pair Authentication) giải quyết triệt để những điểm yếu này. Một cặp khóa gồm:
- Private Key (Khóa bí mật): Lưu giữ an toàn trên máy tính cá nhân của bạn, không bao giờ chia sẻ cho bất kì ai.
- Public Key (Khóa công khai): Đặt trên máy chủ đích tại file
~/.ssh/authorized_keys.
Khi kết nối, máy chủ gửi một thử thách mã hóa (Cryptographic Challenge) và chỉ có người sở hữu Private Key tương ứng mới có thể giải mã và phản hồi, cho phép đăng nhập tức thì mà không cần truyền mật khẩu qua mạng.
1. Lựa chọn thuật toán: Tại sao nên chọn Ed25519 thay vì RSA?
Trong nhiều năm, thuật toán RSA (2048-bit hoặc 4096-bit) là tiêu chuẩn phổ biến nhất. Tuy nhiên, hiện nay Ed25519 (Elliptic Curve Cryptography - Mã hóa đường cong Elliptic) đã trở thành lựa chọn vượt trội được khuyến nghị trên toàn cầu.
So sánh Ed25519 và RSA:
- Độ dài khóa cực ngắn: Ed25519 chỉ có 68 ký tự (khóa công khai), giúp dễ dàng sao chép và quản lý, trong khi RSA-4096 dài hơn 700 ký tự.
- Tốc độ tính toán: Tạo khóa và ký xác thực nhanh gấp nhiều lần so với RSA.
- Độ an toàn mật mã: Cung cấp mức độ bảo mật tương đương khóa RSA 3072-bit nhưng có khả năng chống lại các cuộc tấn công kênh phụ (Side-channel Attacks).
2. Các bước tạo cặp khóa SSH Ed25519 chuẩn mực
Trên máy tính cá nhân của bạn (macOS, Linux hoặc Windows Terminal), mở Terminal và chạy lệnh:
ssh-keygen -t ed25519 -C "admin@mycompany.com"
Quá trình tạo khóa sẽ yêu cầu bạn nhập:
- File lưu trữ: Nhấn
Enterđể lưu mặc định tại~/.ssh/id_ed25519. - Passphrase (Mật mã bảo vệ khóa): Nhập một cụm mật mã mạnh để mã hóa Private Key của bạn trên đĩa.
Kiểm tra cặp khóa đã được tạo thành công:
ls -la ~/.ssh/id_ed25519*
id_ed25519: File Private Key (Quyền 600 - Bảo mật tuyệt đối).id_ed25519.pub: File Public Key (Có thể chia sẻ công khai).
3. Sao chép Public Key lên máy chủ từ xa
Cách 1: Sử dụng tiện ích ssh-copy-id (Tự động & Khuyến nghị)
ssh-copy-id -i ~/.ssh/id_ed25519.pub devadmin@<IP_MÁY_CHỦ>
Cách 2: Thiết lập thủ công (Áp dụng cho Windows CMD hoặc môi trường hạn chế)
Đăng nhập vào VPS và chạy các lệnh:
# Tạo thư mục .ssh trên máy chủ nếu chưa có
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Mở file authorized_keys và dán nội dung id_ed25519.pub vào
nano ~/.ssh/authorized_keys
# Phân quyền bảo mật cho file authorized_keys
chmod 600 ~/.ssh/authorized_keys
4. Quản lí hàng chục VPS dễ dàng với file ~/.ssh/config
Nếu bạn phải quản lí nhiều máy chủ với IP, cổng và tài khoản khác nhau, việc gõ lệnh ssh -p 2222 devadmin@192.168.1.100 -i ~/.ssh/key_aws mỗi ngày là vô cùng phiền toái.
Hãy cấu hình file ~/.ssh/config trên máy tính cá nhân của bạn:
nano ~/.ssh/config
Thêm các bí danh (Host Aliases) thân thiện:
# Máy chủ Web Production
Host web-prod
HostName 203.0.113.50
User devadmin
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
# Máy chủ Database nội bộ
Host db-internal
HostName 10.0.0.15
User dbadmin
Port 22
IdentityFile ~/.ssh/id_ed25519_db
ProxyJump web-prod
# Máy chủ Staging
Host staging
HostName 198.51.100.22
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Bây giờ, để kết nối vào máy chủ Web Production, bạn chỉ cần gõ duy nhất:
ssh web-prod
SSH Client sẽ tự động lấy đúng IP, Port, User và File khóa để kết nối tức thì!
5. Tự động lưu Passphrase với SSH Agent
Để không phải nhập lại Passphrase mỗi lần kết nối SSH trong phiên làm việc, bạn có thể nạp khóa vào ssh-agent:
# Khởi động ssh-agent
eval "$(ssh-agent -s)"
# Nạp khóa vào bộ nhớ RAM của agent
ssh-add ~/.ssh/id_ed25519
Trên macOS, bạn có thể thêm cấu hình sau vào ~/.ssh/config để Keychain tự động nhớ Passphrase vĩnh viễn:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
6. Vô hiệu hóa hoàn toàn xác thực Mật khẩu trên máy chủ
Sau khi đã kiểm tra đăng nhập bằng SSH Key thành công, hãy khóa hoàn toàn cửa sau (Password Authentication) trên máy chủ:
Mở file /etc/ssh/sshd_config trên VPS:
sudo nano /etc/ssh/sshd_config
Đảm bảo các giá trị sau:
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
Kiểm tra cú pháp và khởi động lại SSH daemon:
sudo sshd -t
sudo systemctl restart ssh
Bảng tổng kết phân quyền thư mục SSH
Phân quyền không đúng trên Linux sẽ khiến SSH từ chối nhận khóa vì lí do an toàn. Hãy luôn nhớ bảng quyền sau:
| Thư mục / Tệp tin | Vị trí | Phân quyền bắt buộc | Lệnh thiết lập |
|---|---|---|---|
~/.ssh/ | Cả Client & Server | 700 (rwx------) | chmod 700 ~/.ssh |
id_ed25519 (Private) | Máy Client cá nhân | 600 (rw-------) | chmod 600 ~/.ssh/id_ed25519 |
id_ed25519.pub (Public) | Máy Client cá nhân | 644 (rw-r--r--) | chmod 644 ~/.ssh/id_ed25519.pub |
authorized_keys | Máy Server từ xa | 600 (rw-------) | chmod 600 ~/.ssh/authorized_keys |
~/.ssh/config | Máy Client cá nhân | 600 (rw-------) | chmod 600 ~/.ssh/config |
Lời kết
Sử dụng SSH Key với thuật toán Ed25519 kết hợp file cấu hình ~/.ssh/config là tiêu chuẩn vàng của mọi kĩ sư DevOps chuyên nghiệp. Bạn vừa nâng tầm bảo mật cho máy chủ của mình lên mức tối đa, vừa tiết kiệm được rất nhiều thời gian đăng nhập mỗi ngày.



Đăng nhập bằng tài khoản GitHub để đặt câu hỏi hoặc đóng góp ý kiến cho bài viết.