SSH key thay vì password — setup 2 phút, bảo mật 10 lần

Tài liệu » Quản trị VPS - Server » SSH key thay vì password — setup 2 phút, bảo mật 10 lần

Vì sao cần SSH key thay vì password ngay? — Cơn ác mộng Brute-force port 22

Việc mở port 22 (SSH) ra Internet là một rủi ro bảo mật tiềm ẩn. Kẻ xấu liên tục quét và tấn công dò mật khẩu (brute-force) vào server của bạn.

  • 🔐 Tăng cường bảo mật: Khóa truy cập bằng chuỗi ký tự phức tạp.
  • 🚀 Đăng nhập nhanh hơn: Không cần gõ mật khẩu mỗi lần.
  • 🚫 Chặn tấn công: Ngăn chặn hiệu quả các cuộc tấn công brute-force.
  • 🔑 Quản lý tập trung: Dễ dàng cấp/thu hồi quyền truy cập.
  • 💸 Tiết kiệm chi phí: Giảm nguy cơ server bị chiếm dụng làm botnet.

1. Tạo cặp SSH key — Chìa khóa và ổ khóa của bạn

Tóm gọn: SSH key bao gồm một cặp file: public key (chia sẻ được) và private key (giữ bí mật tuyệt đối). Bạn sẽ tạo cặp này trên máy tính cá nhân (local machine).

Bước 1: Mở Terminal trên máy Local

Sử dụng Terminal trên macOS/Linux hoặc Git Bash/WSL trên Windows.

Bước 2: Chạy lệnh ssh-keygen

Lệnh này sẽ hướng dẫn bạn tạo cặp key.

ssh-keygen -t rsa -b 4096
  • -t rsa: Chỉ định thuật toán mã hóa là RSA.
  • -b 4096: Đặt độ dài key là 4096 bit, tăng cường độ bảo mật.

Output mẫu:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz0123456789aBcDeFg user@hostname
The key's randomart image is:
+---[RSA 4096]----+
|        .o=.     |
|       .o+o .    |
|      . o=o      |
|       o.+       |
|      . S        |
|       o .       |
|      . o        |
|     . o .       |
|    . o+o        |
+----[SHA256]-----+

Bước 3: Nhập đường dẫn lưu key và Passphrase

  • Enter file in which to save the key: Nhấn Enter để chấp nhận đường dẫn mặc định (~/.ssh/id_rsa). Đây là nơi lưu trữ private key và public key.
  • Enter passphrase: Nhập một mật khẩu mạnh để bảo vệ private key. Đây là lớp bảo mật thứ hai, rất quan trọng. Nếu ai đó lấy được private key của bạn, họ vẫn cần mật khẩu này để sử dụng nó. Nhấn Enter nếu bạn muốn không có passphrase (không khuyến khích).
  • Enter same passphrase again: Nhập lại passphrase để xác nhận.

⚠️ Cảnh báo: Tuyệt đối không chia sẻ file private key (id_rsa) với bất kỳ ai. File này là “chìa khóa vạn năng” truy cập server của bạn.

2. Copy Public Key lên Server — Mở cửa cho “chìa khóa” của bạn

Tóm gọn: Bạn cần đưa public key (id_rsa.pub) lên server để server biết và tin tưởng “chìa khóa” này.

Bước 1: Sử dụng ssh-copy-id (Cách dễ nhất)

Lệnh ssh-copy-id tự động copy public key và thiết lập quyền truy cập trên server.

ssh-copy-id username@your_server_ip
  • username: Tên người dùng bạn sẽ đăng nhập vào server.
  • your_server_ip: Địa chỉ IP hoặc tên miền của server VPS.

Sau khi chạy lệnh này, bạn sẽ được hỏi mật khẩu SSH của user trên server. Nhập đúng mật khẩu, public key sẽ được thêm vào file ~/.ssh/authorized_keys trên server.

Bước 2: Copy thủ công (Nếu ssh-copy-id không có sẵn)

Đầu tiên, xem nội dung public key của bạn:

cat ~/.ssh/id_rsa.pub

Output mẫu:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC3qL7J... user@hostname

Tiếp theo, SSH vào server bằng mật khẩu:

ssh username@your_server_ip

Sau khi đăng nhập, tạo thư mục .ssh nếu chưa có và đặt quyền truy cập đúng:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Tạo hoặc chỉnh sửa file authorized_keys và dán public key của bạn vào đó:

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC3qL7J... user@hostname" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

💡 Mẹo: Đảm bảo bạn copy toàn bộ dòng public key, bao gồm cả ssh-rsa và phần user@hostname.

3. Kiểm tra đăng nhập bằng SSH key — Bước cuối cùng

Tóm gọn: Sau khi copy public key, hãy thử đăng nhập lại để xác nhận SSH key hoạt động.

Bước 1: Đăng nhập lại bằng SSH

Từ máy local, chạy lại lệnh SSH:

ssh username@your_server_ip

Nếu bạn đã đặt passphrase cho private key, bạn sẽ được hỏi passphrase đó. Nếu không đặt passphrase, bạn sẽ đăng nhập thẳng vào server mà không cần gõ bất kỳ mật khẩu nào.

Bước 2: Xác nhận SSH key đã được sử dụng

Sau khi đăng nhập thành công, bạn có thể kiểm tra log SSH trên server để xem key đã được sử dụng:

sudo grep 'Accepted key' /var/log/auth.log

Output mẫu:

Jul 20 10:30:00 your_server_hostname sshd[12345]: Accepted key RSA SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz0123456789aBcDeFg of user@hostname port 22 ssh2

4. Vô hiệu hóa đăng nhập bằng Password trên Server — Khóa chặt cửa

Tóm gọn: Để tận dụng tối đa bảo mật của SSH key, bạn nên tắt hoàn toàn khả năng đăng nhập bằng mật khẩu trên server.

Bước 1: Chỉnh sửa file cấu hình SSHD

Mở file cấu hình SSH daemon (sshd_config) bằng trình soạn thảo văn bản (ví dụ: nano):

sudo nano /etc/ssh/sshd_config

Bước 2: Tìm và sửa các dòng cấu hình

Tìm các dòng sau và đảm bảo chúng có giá trị như bên dưới:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
  • PasswordAuthentication no: Vô hiệu hóa hoàn toàn việc xác thực bằng mật khẩu.
  • ChallengeResponseAuthentication no: Vô hiệu hóa các cơ chế xác thực tương tác khác (thường liên quan đến PAM).
  • UsePAM no: Tắt Pluggable Authentication Modules. Lưu ý: Việc tắt PAM có thể ảnh hưởng đến các dịch vụ khác phụ thuộc vào PAM. Nếu bạn không chắc chắn, hãy để UsePAM yes và chỉ tắt PasswordAuthentication no.

💡 Mẹo: Trước khi tắt PasswordAuthentication, hãy đảm bảo bạn đã đăng nhập thành công bằng SSH key và có thể thực hiện các lệnh quản trị. Nếu không, bạn có thể tự khóa mình ra khỏi server.

Bước 3: Khởi động lại dịch vụ SSHD

Sau khi lưu file cấu hình, bạn cần khởi động lại dịch vụ SSH để áp dụng thay đổi:

sudo systemctl restart sshd

Bước 4: Kiểm tra lại

Thử SSH vào server từ một kết nối mới. Nếu bạn đã tắt đăng nhập bằng mật khẩu, bạn sẽ không thể đăng nhập bằng mật khẩu nữa.

ssh username@your_server_ip

Bạn chỉ nên đăng nhập được bằng SSH key (và passphrase nếu có).

5. Pitfalls & Lỗi thường gặp — Những cạm bẫy cần tránh

Tóm gọn: Dù đơn giản, việc thiết lập SSH key vẫn có thể gặp một số lỗi phổ biến.

  • Lỗi 1: Private key bị lộ.
    • Vấn đề: File ~/.ssh/id_rsa trên máy local bị sao chép hoặc truy cập trái phép.
    • Cách fix: Ngay lập tức xóa public key khỏi authorized_keys trên tất cả các server bạn đã sử dụng key đó. Tạo lại cặp key mới và đặt passphrase mạnh.
  • Lỗi 2: Quyền truy cập thư mục/file sai trên server.
    • Vấn đề: Thư mục ~/.ssh hoặc file ~/.ssh/authorized_keys có quyền quá rộng (ví dụ: 777). SSHD sẽ từ chối sử dụng key vì lý do bảo mật.
    • Cách fix: Đảm bảo quyền truy cập đúng: chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys trên server.
  • Lỗi 3: Copy Public Key bị thiếu hoặc sai ký tự.
    • Vấn đề: Copy thiếu phần cuối (user@hostname) hoặc sai một ký tự trong public key khi thêm vào authorized_keys.
    • Cách fix: Sử dụng cat ~/.ssh/id_rsa.pub để xem lại đúng public key trên máy local và copy chính xác từng ký tự vào file authorized_keys trên server. Hoặc đơn giản là dùng lại ssh-copy-id.
  • Lỗi 4: Quên Passphrase cho Private Key.
    • Vấn đề: Bạn đã đặt passphrase cho private key nhưng giờ quên mất.
    • Cách fix: Không có cách nào để khôi phục passphrase. Bạn buộc phải tạo lại cặp SSH key mới và đặt passphrase dễ nhớ hơn (nhưng vẫn đủ mạnh).
  • Lỗi 5: Tắt Password Authentication quá sớm.
    • Vấn đề: Đã tắt đăng nhập bằng mật khẩu trên server nhưng SSH key lại không hoạt động, dẫn đến mất quyền truy cập.
    • Cách fix: Đây là lý do bạn cần luôn kiểm tra SSH key hoạt động tốt trước khi tắt Password Authentication. Nếu lỡ bị khóa, bạn có thể cần liên hệ nhà cung cấp VPS để reset truy cập hoặc mount ổ đĩa để sửa file cấu hình.

⚠️ Cảnh báo: Luôn kiểm tra kỹ các bước trước khi thực hiện, đặc biệt là khi chỉnh sửa cấu hình bảo mật quan trọng như SSH.

6. Key Takeaways — Nắm chắc kiến thức cốt lõi

  • SSH key cung cấp bảo mật cao hơn so với mật khẩu truyền thống.
  • Cặp SSH key gồm private key (bí mật)public key (chia sẻ).
  • Sử dụng ssh-keygen để tạo cặp key và ssh-copy-id để triển khai lên server.
  • Passphrase là lớp bảo mật bổ sung cho private key.
  • Tắt đăng nhập bằng mật khẩu trên server là bước cuối cùng để khóa chặt bảo mật.

7. FAQ — Giải đáp thắc mắc thường gặp

### SSH key có an toàn hơn mật khẩu không?

Có, SSH key phức tạp hơn nhiều so với mật khẩu thông thường và không bị tấn công dò quét (brute-force) dễ dàng.

### Tôi có thể dùng chung một SSH key cho nhiều server không?

Có, bạn có thể dùng cùng một public key để truy cập nhiều server khác nhau. Tuy nhiên, hãy cân nhắc rủi ro: nếu private key bị lộ, tất cả các server đó đều bị ảnh hưởng.

### Làm sao để quản lý nhiều SSH key?

Bạn có thể lưu trữ các cặp key khác nhau trong các thư mục khác nhau và sử dụng file cấu hình SSH (~/.ssh/config) để chỉ định key nào sẽ dùng cho server nào.

### Nếu tôi mất private key thì sao?

Bạn sẽ không thể đăng nhập vào các server đã sử dụng public key tương ứng. Bạn cần tạo lại cặp key mới và cập nhật public key lên server.

### Có cần đặt Passphrase cho Private Key không?

Rất khuyến khích. Passphrase cung cấp một lớp bảo mật bổ sung quan trọng. Nếu ai đó lấy được file private key của bạn, họ vẫn cần passphrase để sử dụng nó.

Cần VPS chạy Linux ổn định để thực hành?

Thiết lập SSH key là bước cơ bản nhưng cực kỳ quan trọng để bảo vệ server của bạn. Đừng chần chừ, hãy bắt đầu bảo mật VPS ngay hôm nay!

VSIS.net cung cấp các dịch vụ VPS cấu hình mạnh mẽ, giá tốt, sẵn sàng cho mọi nhu cầu của bạn.

Khám phá VPS tại VSIS.net ngay!

Lên đầu trang