Đăng nhập VPS Linux bằng khoá SSH thay cho mật khẩu: không bị dò mật khẩu, không phải nhớ, và vào máy nhanh hơn. Bài này đi từ lúc tạo khoá trên máy tính của quý khách tới lúc tắt hẳn đăng nhập bằng mật khẩu. Các bước dùng được cho Ubuntu, Debian, AlmaLinux và Rocky Linux.
1. Khoá SSH hoạt động thế nào
Một bộ khoá gồm hai tệp:
| Tệp | Nằm ở đâu | Lưu ý |
|---|---|---|
Khoá riêng (private key), ví dụ id_ed25519 |
Chỉ trên máy tính của quý khách | Không gửi cho ai, kể cả Cloudzone. Ai có tệp này là vào được máy chủ |
Khoá công khai (public key), ví dụ id_ed25519.pub |
Chép lên VPS | Đưa cho ai cũng không sao |
Khi đăng nhập, VPS đối chiếu khoá công khai với khoá riêng trên máy quý khách. Khớp thì cho vào, không cần mật khẩu.
2. Tạo khoá trên máy tính
Windows 10, Windows 11, macOS và Linux đều có sẵn lệnh ssh-keygen. Trên Windows mở PowerShell, trên macOS/Linux mở Terminal, rồi chạy:
ssh-keygen -t ed25519 -C "may-tinh-cua-toi"
- Hỏi chỗ lưu thì bấm Enter để giữ mặc định (thư mục
.sshtrong thư mục người dùng). - Hỏi passphrase thì nên đặt một cụm mật khẩu: lỡ mất tệp khoá riêng, người nhặt được vẫn không dùng được.
Xem khoá công khai vừa tạo để chép đi:
# Windows (PowerShell)
type $env:USERPROFILE\.ssh\id_ed25519.pub
# macOS, Linux
cat ~/.ssh/id_ed25519.pub
Kết quả là một dòng bắt đầu bằng ssh-ed25519. Chép trọn một dòng đó.
Quý khách quen dùng PuTTY: mở PuTTYgen, chọn kiểu EdDSA (Ed25519), bấm Generate và rê chuột trong ô xám tới khi xong. Chép dòng trong ô Public key for pasting into OpenSSH authorized_keys file, rồi bấm Save private key để lưu tệp .ppk.
3. Đưa khoá công khai lên VPS
Lần đầu vẫn phải vào VPS bằng mật khẩu (lấy trên Portal, xem bài Lấy thông tin mật khẩu VPS).
Cách 1 – một lệnh, trên macOS và Linux:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@IP-VPS
Cách 2 – chép tay, dùng được từ mọi máy: đăng nhập VPS bằng mật khẩu rồi chạy lần lượt:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys # dán dòng ssh-ed25519 ... vào cuối tệp, lưu lại
chmod 600 ~/.ssh/authorized_keys
Mỗi khoá một dòng. Dán thêm khoá của máy khác thì xuống dòng rồi dán tiếp, đừng xoá dòng cũ.
Báo không có nano thì cài trước: apt install nano -y (Ubuntu, Debian) hoặc dnf install nano -y (AlmaLinux, Rocky).
4. Thử đăng nhập bằng khoá
Giữ nguyên phiên SSH đang mở, mở một cửa sổ mới rồi thử:
ssh root@IP-VPS
Vào thẳng không hỏi mật khẩu (hoặc chỉ hỏi passphrase của khoá) là đã xong. Với PuTTY: vào Connection → SSH → Auth → Credentials, chọn tệp .ppk ở ô Private key file for authentication, quay lại Session điền IP rồi bấm Open.
5. Tắt đăng nhập bằng mật khẩu
Chỉ làm bước này sau khi mục 4 đã chạy được. Mở tệp cấu hình:
nano /etc/ssh/sshd_config
Sửa (hoặc thêm) hai dòng:
PubkeyAuthentication yes
PasswordAuthentication no
⚠️ Ubuntu 22.04 trở lên: kiểm thêm thư mục /etc/ssh/sshd_config.d/. Tệp trong đó (hay gặp nhất là 50-cloud-init.conf) có thể ghi PasswordAuthentication yes và thắng dòng quý khách vừa sửa. Đổi dòng đó thành no.
Kiểm cú pháp rồi khởi động lại dịch vụ SSH:
sshd -t
systemctl restart ssh # Ubuntu, Debian
systemctl restart sshd # AlmaLinux, Rocky
Lại mở một cửa sổ mới để thử đăng nhập trước khi đóng phiên cũ. Thử bằng mật khẩu phải bị từ chối, thử bằng khoá phải vào được.
6. Lỗi thường gặp
| Hiện tượng | Cách xử lý |
|---|---|
| Vẫn bị hỏi mật khẩu | Quyền thư mục sai. Chạy lại chmod 700 ~/.ssh và chmod 600 ~/.ssh/authorized_keys; kiểm dòng khoá không bị ngắt làm nhiều dòng khi dán |
Permission denied (publickey) |
Khoá trên máy không khớp khoá đã dán lên VPS, hoặc đang đăng nhập nhầm tài khoản (khoá dán cho root thì phải vào bằng root) |
| PuTTY báo không đọc được tệp khoá | PuTTY chỉ đọc tệp .ppk. Mở PuTTYgen → Conversions → Import key, chọn tệp khoá riêng rồi lưu lại dưới dạng .ppk |
| Đã tắt mật khẩu rồi mất khoá, không vào được nữa | Vào bằng Console trên Portal, dán lại khoá mới vào authorized_keys hoặc tạm bật lại mật khẩu |
Cần bật lại đăng nhập bằng mật khẩu cho root vì lý do riêng: xem bài Cho phép tài khoản root đăng nhập SSH bằng mật khẩu, và vì sao nên cân nhắc trước khi làm.