SSH key là gì? Cách thiết lập SSH key cho VPS Linux

Việc sử dụng SSH key (Secure Shell key) thay cho mật khẩu khi đăng nhập vào VPS là một phương pháp bảo mật được khuyên dùng rộng rãi.

Bài viết này sẽ giải thích chi tiết về SSH key theo cách dễ hiểu nhất cho người mới bắt đầu.

SSH Key là gì? – Giải thích bằng ví dụ thực tế

Để hiểu SSH key, hãy tưởng tượng VPS của bạn như một căn nhà cần bảo vệ:

🔑 Cách truyền thống – Dùng mật khẩu:
Giống như sử dụng khóa cửa điện tử với mã số (123456…).

Vấn đề nguy hại đặt ra là:

  • Kẻ gian có thể quan sát khi bạn bấm mã hoặc thử đoán mã
  • Hacker dùng công cụ tự động thử hàng triệu mật khẩu mỗi giây (brute force attack)
  • Mật khẩu có thể bị lộ qua keylogger, phishing email, hoặc bị nhân viên xem trộm

🗝️ Cách hiện đại – Dùng SSH Key:

Giống như sử dụng vân tay để mở cửa nên rất an toàn.

  • Mỗi người có vân tay độc nhất, không thể làm giả
  • Không ai có thể “đoán” được vân tay của bạn
  • Trên internet, SSH key sử dụng mã hóa 2048-4096 bit – gần như không thể phá vỡ

Tại sao nên chuyển sang SSH Key?

1. Bảo mật vượt trội:

Mật khẩu thông thường SSH Key
Có thể đoán được (123456, password123…) Không thể đoán – độ dài tương đương mật khẩu 600+ ký tự
Dễ bị lộ khi gõ (keylogger, camera) Không cần gõ gì cả
Phải nhớ hoặc lưu ở đâu đó File key lưu an toàn trong máy
Ai biết mật khẩu đều vào được Chỉ ai có file Private Key mới vào được
Dễ bị tấn công brute force Miễn dịch với brute force

2. Tiện lợi trong công việc:

  • Không cần nhớ mật khẩu phức tạp
  • Đăng nhập nhanh chóng, không cần gõ password
  • Dễ dàng tự động hóa (backup, deploy code, CI/CD)
  • Một key có thể dùng cho nhiều server

3. Ngăn chặn các cuộc tấn công phổ biến:

  • Botnet quét port 22 và thử mật khẩu tự động
  • Tấn công từ điển (dictionary attack)
  • Nhân viên datacenter truy cập trái phép

Cơ chế hoạt động của SSH Key

SSH Key hoạt động theo nguyên lý mã hóa bất đối xứng với 2 thành phần:

  1. Private Key (Khóa riêng): File bạn giữ trên máy tính – giống như chìa khóa trong túi của bạn
  2. Public Key (Khóa công khai): File upload lên VPS – giống như ổ khóa gắn trên cửa

→ Chỉ Private Key của bạn mới mở được Public Key này!

Khi bạn kết nối SSH, hệ thống sẽ:
1. VPS gửi một thử thách mã hóa bằng Public Key
2. Máy tính của bạn dùng Private Key để giải mã
3. Nếu giải mã thành công → Xác thực OK → Cho phép đăng nhập

Các thuật toán SSH Key phổ biến

Khi tạo SSH key, bạn có thể chọn thuật toán mã hóa phù hợp:

Thuật toán Độ dài Bảo mật Khuyến nghị
Ed25519 256 bit Xuất sắc ✅ Nên dùng – Nhanh, bảo mật cao nhất
RSA 2048-4096 bit Tốt ✅ Dùng khi Ed25519 không được hỗ trợ
ECDSA 256-521 bit Tốt ⚠️ Ít phổ biến hơn
DSA 1024 bit Kém ❌ Không dùng – Đã lỗi thời

💡 Lời khuyên: Ưu tiên dùng Ed25519. Nếu VPS cũ không hỗ trợ, dùng RSA 4096 bit.

Hướng dẫn tạo SSH Key từng bước

BƯỚC 1: Tạo cặp SSH Key trên máy tính

Trên Windows (dùng PowerShell):

# Mở PowerShell với quyền Admin và chạy lệnh:
ssh-keygen -t ed25519 -C "email@example.com"

# Hệ thống sẽ hỏi 3 câu:
# 1. Lưu key ở đâu? → Enter để dùng vị trí mặc định
# 2. Đặt passphrase (mật khẩu bảo vệ key)? → Nhập hoặc Enter để bỏ qua
# 3. Xác nhận passphrase → Nhập lại hoặc Enter

# Kết quả: 2 file được tạo trong C:\Users\TenBan\.ssh\
# - id_ed25519 (Private Key - GIỮ BÍ MẬT!)
# - id_ed25519.pub (Public Key - có thể chia sẻ)

Kết quả mẫu khi tạo thành công:

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\vutruso/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [Nhập mật khẩu hoặc Enter]
Enter same passphrase again: [Nhập lại hoặc Enter]
Your identification has been saved in C:\Users\vutruso/.ssh/id_ed25519
Your public key has been saved in C:\Users\vutruso/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:OQQw+PmFVcIN+IkvbZuJNfyPGAe19pCwCUxnhSuNY3k email@example.com

Trên Mac/Linux (dùng Terminal):

# Mở Terminal và chạy:
ssh-keygen -t ed25519 -C "email@example.com"

# Làm tương tự như Windows
# File được lưu trong ~/.ssh/

📝 Lưu ý về lệnh tạo key:

  • Nếu dùng ssh-keygen không tham số → Tạo RSA 3072 bit (mặc định)
  • -t ed25519: Chọn thuật toán Ed25519 (khuyến nghị)
  • -C "email": Thêm comment để dễ nhận diện key
  • Nếu VPS không hỗ trợ Ed25519, dùng: ssh-keygen -t rsa -b 4096

BƯỚC 2: Copy Public Key lên VPS

Trước tiên, xem nội dung Public Key:

# Windows:
type C:\Users\TenBan\.ssh\id_ed25519.pub

# Mac/Linux:
cat ~/.ssh/id_ed25519.pub

Copy toàn bộ dòng bắt đầu bằng ssh-ed25519... hoặc ssh-rsa...

Cách 1: Upload thủ công (universal – mọi hệ điều hành)

# Đăng nhập VPS bằng mật khẩu (lần cuối!)
ssh root@ip-vps-cua-ban

# Tạo thư mục .ssh nếu chưa có
mkdir -p ~/.ssh

# Thêm Public Key vào file authorized_keys
nano ~/.ssh/authorized_keys

# Paste Public Key vào (chuột phải hoặc Shift+Insert)
# Lưu: Ctrl+X → Y → Enter

# QUAN TRỌNG: Phân quyền đúng
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Hoặc bạn cũng có thể upload thủ công thông qua FTP/SFTP nhé.

Cách 2: Tự động với ssh-copy-id (Mac/Linux)

# Một lệnh duy nhất
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@ip-vps-cua-ban

# Nhập mật khẩu khi được hỏi

BƯỚC 3: Test kết nối với SSH Key

# Thoát khỏi VPS nếu đang ở trong
exit

# Test đăng nhập bằng key
ssh root@ip-vps-cua-ban

# Nếu thành công: Vào được không cần mật khẩu
# Nếu thất bại: Xem phần xử lý lỗi bên dưới

BƯỚC 4: Tăng cường bảo mật (Khuyến nghị)

Sau khi đã test thành công, tắt đăng nhập bằng mật khẩu:

# Sửa file cấu hình SSH
sudo nano /etc/ssh/sshd_config

Tìm và sửa các dòng sau


# Khong cho dang nhap bang mat khau
PasswordAuthentication no 
# Bat dang nhap bang ssh key
PubkeyAuthentication yes
ChallengeResponseAuthentication no

# Lưu và khởi động lại SSH
sudo systemctl restart sshd

# Hoặc trên server cũ:
sudo service ssh restart

Các định dạng SSH Key và vấn đề tương thích

Tùy phần mềm SSH client bạn dùng, định dạng key có thể khác nhau:

Bảng tương thích phần mềm

Phần mềm Hệ điều hành Định dạng key Ghi chú
OpenSSH Linux, Mac, Git Bash OpenSSH (mặc định) Phổ biến nhất
PuTTY Windows PPK Cần convert từ OpenSSH
Bitvise Windows OpenSSH, SSH2 Hỗ trợ nhiều định dạng
WinSCP Windows PPK Dùng chung với PuTTY
MobaXterm Windows OpenSSH, PPK Linh hoạt

Nhận biết các định dạng key

OpenSSH Format (phổ biến nhất):

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABl...
-----END OPENSSH PRIVATE KEY-----

PPK Format (PuTTY):

PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20240101
Public-Lines: 6
AAAAB3NzaC1yc2EAAAABJQAAAQEAw5sfqIpC2qm3i9gFmFKw7HtDCLmv7HVI...

SSH2 Format (Bitvise):

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "user@hostname"
AAAAB3NzaC1yc2EAAAABJQAAAQEAw5sfqIpC2qm3i9gFmFKw7HtDCLmv7HVI...
---- END SSH2 PUBLIC KEY ----

Chuyển đổi giữa các định dạng

OpenSSH → PPK (cho PuTTY):

  1. Mở PuTTYgen
  2. File → Load private key → Chọn file OpenSSH
  3. Save private key → Lưu thành .ppk

PPK → OpenSSH:

  1. Mở PuTTYgen
  2. Load file .ppk
  3. Conversions → Export OpenSSH key

Dòng lệnh chuyển đổi:

# PPK → OpenSSH
puttygen key.ppk -O private-openssh -o id_rsa
puttygen key.ppk -O public-openssh -o id_rsa.pub

# SSH2 → OpenSSH
ssh-keygen -i -f ssh2_key.pub > openssh_key.pub

# OpenSSH → SSH2  
ssh-keygen -e -f openssh_key.pub > ssh2_key.pub

Xử lý các lỗi thường gặp

🔴 Lỗi: “Server refused our key”

Nguyên nhân: Quyền file không đúng hoặc sai định dạng key

Cách khắc phục:

# Kiểm tra quyền file trên VPS
ls -la ~/.ssh/

# Đảm bảo quyền đúng:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# Kiểm tra owner
chown -R $USER:$USER ~/.ssh

🔴 Lỗi: “Permission denied (publickey)”

Nguyên nhân: Sử dụng sai key hoặc key không tồn tại

Cách khắc phục:

# Xem SSH đang dùng key nào
ssh -vv root@ip-vps-cua-ban

# Chỉ định key cụ thể
ssh -i ~/.ssh/id_ed25519 root@ip-vps-cua-ban

# Windows
ssh -i C:\Users\TenBan\.ssh\id_ed25519 root@ip-vps-cua-ban

🔴 Lỗi: Public Key format không đúng

Sai: Copy thiếu hoặc xuống dòng

ssh-rsa AAAAB3NzaC1yc2EA...
...tiếp tục dòng 2

Đúng: Một dòng duy nhất

ssh-rsa AAAAB3NzaC1yc2EA...xyz email@example.com

🔴 Lỗi: Bitvise/PuTTY không nhận key

Giải pháp: Convert sang định dạng phù hợp (xem phần chuyển đổi ở trên)

Checklist khắc phục lỗi

Bạn check xem có vượt qua các lỗi sau không nhé.

  1. Kiểm tra định dạng key đúng với phần mềm đang dùng
  2. Đảm bảo quyền file: 700 cho ~/.ssh và 600 cho authorized_keys
  3. Public key phải nằm trên 1 dòng duy nhất
  4. Không có ký tự lạ hoặc space thừa trong key
  5. Test với verbose mode: ssh -vvv user@host

Câu hỏi thường gặp (FAQ)

❓ Nếu mất Private Key thì sao?
→ Không thể khôi phục! Như mất chìa khóa nhà vậy. Luôn backup Private Key ở nơi an toàn (USB, cloud mã hóa).

❓ Một SSH key có thể dùng cho bao nhiêu VPS?
→ Không giới hạn! Copy Public Key lên bao nhiêu server tùy ý. Như một chìa khóa mở được nhiều cửa.

❓ Có nên tạo nhiều SSH key không?
→ Nên! Mỗi máy tính/thiết bị nên có key riêng. Dễ quản lý và thu hồi quyền truy cập khi cần.

❓ Passphrase là gì? Có cần thiết không?
→ Là mật khẩu bảo vệ Private Key – lớp bảo mật thứ 2. Rất cần thiết cho laptop/máy dùng chung.

❓ SSH key có hết hạn không?
→ Không tự hết hạn. Nhưng nên rotate (đổi key mới) định kỳ 6-12 tháng để tăng bảo mật.

❓ Có thể khôi phục VPS nếu tắt password login mà mất key?
→ Phải liên hệ provider VPS để reset qua console hoặc rescue mode. Luôn test kỹ trước khi tắt password!

Các biện pháp bảo mật bổ sung

Sau khi setup SSH key, tăng cường bảo mật thêm:

  1. Đổi port SSH mặc định (22):
    # Sửa trong /etc/ssh/sshd_config
    Port 2222
  2. Cài đặt Fail2Ban: Tự động block IP đăng nhập sai nhiều lần
  3. Firewall rules: Chỉ cho phép IP cụ thể kết nối SSH
  4. Disable root login: Tạo user sudo thay vì dùng root
  5. 2FA Authentication: Thêm Google Authenticator cho SSH

Tổng kết

SSH Key không chỉ an toàn hơn mật khẩu rất nhiều mà còn tiện lợi hơn trong công việc hàng ngày.

Ban đầu tiếp cận có vẻ phức tạp nhưng một khi đã setup xong, bạn sẽ không muốn quay lại dùng mật khẩu nữa!

Checklist triển khai SSH Key:

  1. Tạo SSH key pair (Ed25519 hoặc RSA 4096)
  2. Upload Public Key lên VPS
  3. Test kết nối thành công
  4. Backup Private Key
  5. Tắt password authentication
  6. Setup thêm các biện pháp bảo mật

Chúc bạn triển khai SSH Key thành công!

4.8/5 - (5 votes)

Nếu bạn thấy bài viết có ích bạn có thể chia sẻ bài viết này. Yêu cầu thêm bài viết tại đây
Đã copy
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan