Tạo SSH key và đăng nhập VPS Linux bằng key

Đă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 .ssh trong 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.

Hướng dẫn này có ích cho Quý khách không?

Cần đặt dịch vụ? Xem cấu hình và giá tại bảng giá Cloudzone - đặt gói trực tuyến, nhận dịch vụ ngay sau thanh toán. Cần tư vấn, mở khung chat ở góc phải màn hình.

Hướng dẫn liên quan