Nếu bạn đang quản lý một máy chủ VPS, chắc hẳn bạn đã quá quen thuộc với việc đăng nhập bằng mật khẩu (password). Nhưng bạn có biết, mỗi ngày có hàng ngàn cuộc tấn công Brute Force (dò mật khẩu) đang diễn ra, nhắm vào VPS của bạn? Việc chỉ dựa vào mật khẩu, dù phức tạp đến đâu, cũng giống như khóa cửa nhà bằng một ổ khóa thông thường.
Trong khi đó, giới chuyên gia và quản trị hệ thống chuyên nghiệp đã chuyển sang một phương thức an toàn và tiện lợi hơn. Câu hỏi SSH Key cho VPS là gì chính là bước đầu tiên để bạn nâng cấp bảo mật cho VPS của mình lên mức tuyệt đối.
Bài viết này sẽ là hướng dẫn chi tiết, từ A đến Z, giải thích SSH Key cho VPS là gì, tại sao nó vượt trội so với mật khẩu, và quan trọng nhất là cách tạo và sử dụng nó một cách chính xác, ngay cả khi bạn không phải là một chuyên gia bảo mật.
SSH Key cho VPS (hay còn gọi là SSH Key) là một phương thức xác thực truy cập máy chủ (VPS) thông qua giao thức SSH (Secure Shell). Thay vì dùng một mật khẩu (thứ bạn nhớ), bạn sẽ dùng một cặp "chìa khóa" mã hóa (thứ bạn sở hữu) để chứng minh mình là chủ sở hữu hợp lệ.
Để hiểu đơn giản, hãy tưởng tượng:
Đăng nhập bằng Mật khẩu: Giống như dùng một ổ khóa số. Kẻ gian có thể đứng từ xa và thử hàng triệu tổ hợp số (tấn công Brute Force) cho đến khi tìm đúng mật khẩu.
Đăng nhập bằng SSH Key: Giống như dùng một ổ khóa cơ cực kỳ phức tạp, được thiết kế riêng. Bạn giữ chìa khóa (Private Key) và ổ khóa (Public Key) được gắn trên cửa (VPS). Sẽ không ai có thể mở được ổ khóa đó nếu không có chính xác chiếc chìa khóa của bạn.
Việc tìm hiểu SSH Key cho VPS là gì và áp dụng nó là tiêu chuẩn vàng để bảo mật máy chủ Linux hiện nay.
Sức mạnh của SSH Key nằm ở một khái niệm gọi là "Mã hóa bất đối xứng" (Asymmetric Cryptography). Nó luôn bao gồm một cặp chìa khóa:
Giống như một "ổ khóa" chuyên dụng.
Bạn sẽ đặt ổ khóa này lên VPS, trong một file đặc biệt tên là authorized_keys.
Khóa này có thể được chia sẻ công khai mà không sợ bị lộ, vì nó chỉ dùng để mã hóa dữ liệu.
Giống như "chìa khóa" duy nhất để mở ổ khóa bên trên.
Bạn phải giữ bí mật tuyệt đối file này trên máy tính cá nhân của mình (không bao giờ được gửi qua email, chat, hay tải lên đâu).
Khóa này dùng để giải mã dữ liệu mà Public Key đã mã hóa.
Bạn yêu cầu đăng nhập vào VPS.
VPS thấy bạn có một "ổ khóa" (Public Key) đã đăng ký.
VPS tạo ra một thông điệp ngẫu nhiên và "khóa" nó bằng Public Key của bạn, sau đó gửi cho bạn.
Máy tính của bạn nhận thông điệp, dùng "chìa khóa" (Private Key) để giải mã, và gửi lại kết quả cho VPS.
VPS so sánh kết quả. Nếu trùng khớp, VPS biết chính xác là bạn (chứ không phải ai khác) và cho phép bạn đăng nhập mà không cần hỏi mật khẩu.
Toàn bộ quá trình này chỉ diễn ra trong vài giây.
Khi đã hiểu cơ bản SSH Key cho VPS là gì, chúng ta cần biết lý do tại sao nó lại quan trọng đến vậy.
Tấn công Brute Force (tấn công "thô bạo") là phương thức mà hacker sử dụng các kịch bản (script) tự động để thử hàng triệu, hàng tỷ tổ hợp mật khẩu khác nhau vào cổng SSH (thường là cổng 22) của VPS.
Chỉ cần VPS của bạn có địa chỉ IP công khai, gần như chắc chắn nó đang bị dò mật khẩu mỗi ngày. Dù bạn đặt mật khẩu phức tạp (K$a9!z@Pq&), các botnet mạnh mẽ vẫn có thể dò ra theo thời gian. Nếu bạn dùng mật khẩu yếu (như admin123, root, 123456), VPS của bạn có thể bị chiếm quyền trong vòng vài phút.
Sử dụng SSH Key giải quyết triệt để các vấn đề của mật khẩu:
Bảo mật gần như tuyệt đối: Một cặp SSH Key (loại RSA 2048-bit) có độ phức tạp tương đương một mật khẩu dài hàng trăm ký tự. Việc "dò" ra Private Key từ Public Key là bất khả thi về mặt tính toán ở thời điểm hiện tại.
Chống Brute Force hiệu quả: Khi bạn tắt đăng nhập bằng mật khẩu, các cuộc tấn công Brute Force trở nên vô nghĩa. Kẻ tấn công không có Private Key của bạn, chúng không thể làm gì được.
Đăng nhập tiện lợi (Không cần mật khẩu): Bạn không cần phải nhớ hay gõ lại mật khẩu phức tạp mỗi lần đăng nhập. Chỉ cần máy tính của bạn có Private Key, bạn có thể kết nối ngay lập tức.
Quản lý dễ dàng: Bạn có thể dùng một Private Key duy nhất trên máy tính của mình để quản lý hàng trăm VPS (chỉ cần bạn thêm Public Key tương ứng vào tất cả các VPS đó).
Đây là phần thực hành. Quá trình tạo SSH Key sẽ khác nhau một chút tùy thuộc vào hệ điều hành bạn đang dùng (máy tính cá nhân của bạn, không phải VPS). Chúng ta sẽ chia làm 2 phương pháp phổ biến nhất.
Đối với người dùng Windows, cách phổ biến nhất là sử dụng bộ công cụ PuTTY.
Bước 1: Tải PuTTY và PuTTYgen
Nếu bạn chưa có, hãy tải bộ cài đặt PuTTY (Windows Installer) từ trang chủ. Việc cài đặt sẽ bao gồm cả PuTTY (để đăng nhập) và PuTTYgen (để tạo key).
Bước 2: Mở PuTTYgen
Tìm "PuTTYgen" trong menu Start của bạn và mở nó lên.
Bước 3: Tạo (Generate) Key
Trong cửa sổ PuTTYgen, đảm bảo bạn chọn loại Key là RSA.
Trong ô "Number of bits in a generated key", nhập tối thiểu là 2048 (hoặc 4096 nếu muốn an toàn hơn).
Bấm nút Generate.
Chương trình sẽ yêu cầu bạn di chuyển chuột ngẫu nhiên trong vùng trống. Việc này để tạo ra sự ngẫu nhiên cho quá trình sinh key. Hãy cứ di chuyển cho đến khi thanh tiến trình đầy.
Bước 4: Lưu Public Key và Private Key
Khi Key được tạo xong, giao diện sẽ hiển thị:
Public Key: Một đoạn mã dài bắt đầu bằng ssh-rsa... trong ô "Public key for pasting into OpenSSH authorized_keys file". Bạn hãy copy toàn bộ đoạn mã này và dán vào Notepad để lát nữa dùng.
(Tùy chọn) Key passphrase: Đây là mật khẩu để bảo vệ Private Key. Nếu bạn đặt mật khẩu này, mỗi lần dùng Private Key bạn sẽ phải nhập nó. Điều này tăng thêm một lớp bảo mật. Nếu bạn muốn đăng nhập tiện lợi, có thể bỏ trống.
Save private key: Bấm nút này. Đặt tên cho nó (ví dụ: vps_key.ppk). Đây chính là Private Key của bạn, có đuôi .ppk. PHẢI CẤT GIỮ TUYỆT ĐỐI BÍ MẬT file này.
Save public key: Bạn cũng có thể bấm nút này để lưu file Public Key. Tuy nhiên, thứ chúng ta cần để dán lên server là đoạn text ở mục (1).
Vậy là bạn đã có Private Key (file .ppk) trên máy và Public Key (đoạn text ssh-rsa...) trong Notepad.
Nếu bạn dùng macOS, Linux, hoặc Windows 10/11 (với Powershell hoặc WSL), mọi thứ đơn giản hơn vì OpenSSH đã được tích hợp sẵn.
Bước 1: Mở Terminal
Mở ứng dụng Terminal (trên macOS/Linux) hoặc Powershell/CMD (trên Windows).
Bước 2: Chạy lệnh ssh-keygen
Gõ lệnh sau và nhấn Enter:
Bash
ssh-keygen -t rsa -b 2048
-t rsa: Chỉ định loại key là RSA.
-b 2048: Chỉ định độ dài key là 2048 bit.
Bước 3: Trả lời các câu hỏi
Chương trình sẽ hỏi bạn 3 điều:
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Đây là nơi lưu Private Key. Nếu bạn nhấn Enter, nó sẽ lưu ở vị trí mặc định (~/.ssh/id_rsa). Đây là lựa chọn khuyến nghị.
Enter passphrase (empty for no passphrase):
Giống như "Key passphrase" của PuTTYgen. Đây là mật khẩu bảo vệ key. Nhấn Enter để bỏ qua nếu muốn đăng nhập tiện lợi.
Enter same passphrase again:
Nhập lại mật khẩu trên.
Sau khi hoàn tất, chương trình sẽ thông báo đã tạo xong 2 file ở vị trí mặc định (~/.ssh/):
id_rsa: Đây là Private Key (khóa riêng tư).
id_rsa.pub: Đây là Public Key (khóa công khai).
Bước 4: Lấy nội dung Public Key
Bạn cần lấy nội dung của file id_rsa.pub để dán lên VPS. Dùng lệnh sau để xem và copy nó:
Bash
cat ~/.ssh/id_rsa.pub
Bạn sẽ thấy một đoạn mã ssh-rsa... tương tự như của PuTTYgen. Hãy copy toàn bộ.
Giờ bạn đã có "chìa khóa" (Private Key) và "ổ khóa" (Public Key). Bước tiếp theo là "gắn ổ khóa" lên VPS.
Lưu ý: Để làm việc này, bạn vẫn cần đăng nhập vào VPS bằng mật khẩu (đây là lần cuối cùng).
Nếu bạn dùng macOS/Linux, đây là cách dễ nhất. Lệnh này sẽ tự động copy Public Key của bạn lên VPS và tự gán quyền (permission) chính xác.
Mở Terminal của bạn (máy cá nhân) và gõ:
Bash
ssh-copy-id username@IP_CUA_VPS
Thay username bằng tên user bạn hay đăng nhập (ví dụ: root).
Thay IP_CUA_VPS bằng địa chỉ IP của VPS.
Lệnh này sẽ hỏi mật khẩu của user đó (mật khẩu VPS). Sau khi nhập đúng, Public Key của bạn (file id_rsa.pub) sẽ tự động được thêm vào VPS.
Cách này dùng khi bạn không có lệnh ssh-copy-id (như khi dùng PuTTY) hoặc khi bạn tạo VPS mới và nhà cung cấp cho phép bạn dán Public Key ngay lúc tạo.
Đăng nhập vào VPS của bạn bằng mật khẩu (qua PuTTY hoặc Terminal).
Kiểm tra xem thư mục .ssh đã tồn tại chưa. Tạo nó nếu chưa có:
Bash
mkdir ~/.ssh
Tạo (hoặc mở) file authorized_keys bằng trình soạn thảo nano:
Bash
nano ~/.ssh/authorized_keys
Dán nội dung Public Key (đoạn mã ssh-rsa... mà bạn đã copy từ PuTTYgen hoặc id_rsa.pub) vào file này. Nếu file đã có key khác, hãy dán vào dòng mới.
Nhấn Ctrl + X, sau đó Y, rồi Enter để lưu file và thoát nano.
Đây là bước mà 90% người mới làm sai và dẫn đến lỗi "Permission denied". SSH yêu cầu thư mục và file chứa key phải có quyền bảo mật nghiêm ngặt.
Hãy chạy 2 lệnh sau trên VPS của bạn:
Bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh: Chỉ chủ sở hữu (bạn) mới có quyền đọc, ghi, và thực thi thư mục này.
chmod 600 ~/.ssh/authorized_keys: Chỉ chủ sở hữu (bạn) mới có quyền đọc và ghi file này.
Bây giờ, "ổ khóa" của bạn đã được cài đặt đúng cách.
Hãy thử đăng xuất (gõ exit) và đăng nhập lại bằng SSH Key để kiểm tra.
Mở PuTTY.
Trong mục Session, nhập IP của VPS như bình thường.
Ở menu bên trái, đi đến Connection > SSH > Auth.
Bấm vào nút Browse... ở ô "Private key file for authentication".
Tìm và chọn file Private Key (đuôi .ppk) mà bạn đã lưu từ PuTTYgen.
(Khuyến nghị) Quay lại mục Session, đặt tên cho cấu hình này (ví dụ: "My VPS") và bấm Save để lần sau không phải làm lại.
Bấm Open để kết nối.
Nếu mọi thứ đúng, PuTTY sẽ yêu cầu bạn nhập "login as:" (tên user). Sau khi nhập, bạn sẽ vào thẳng VPS mà không bị hỏi mật khẩu.
Nếu bạn lưu key ở vị trí mặc định (~/.ssh/id_rsa), bạn chỉ cần gõ:
Bash
ssh username@IP_CUA_VPS
Hệ thống sẽ tự động tìm và sử dụng Private Key của bạn.
Nếu bạn lưu key ở vị trí khác (ví dụ ~/keys/my-key), bạn dùng lệnh ssh -i:
Bash
ssh -i ~/keys/my-key username@IP_CUA_VPS
Bạn cũng sẽ đăng nhập thẳng vào VPS mà không cần mật khẩu. Việc hiểu SSH Key cho VPS là gì và làm được bước này đã giúp bạn tiết kiệm rất nhiều thời gian.
Sau khi bạn đã thử đăng nhập bằng SSH Key thành công, đây là lúc "vứt bỏ" ổ khóa số và chỉ dùng ổ khóa cơ. Việc này sẽ vô hiệu hóa hoàn toàn các cuộc tấn công Brute Force.
CẢNH BÁO: Chỉ làm bước này khi bạn đã 100% chắc chắn mình đăng nhập bằng SSH Key thành công. Nếu làm sai, bạn có thể tự "khóa" mình ở ngoài VPS.
Đăng nhập vào VPS (bằng SSH Key).
Mở file cấu hình dịch vụ SSH bằng nano (cần quyền sudo hoặc root):
Bash
sudo nano /etc/ssh/sshd_config
Tìm các dòng sau và sửa lại giá trị của chúng:
PasswordAuthentication yes
Sửa thành: PasswordAuthentication no
PermitRootLogin yes (Nếu bạn đang dùng user root)
Nên sửa thành: PermitRootLogin without-password
(An toàn hơn nữa là tạo user riêng và sửa thành PermitRootLogin no)
PubkeyAuthentication yes
Đảm bảo dòng này có giá trị là yes (thường là mặc định).
Nhấn Ctrl + X, Y, Enter để lưu file.
Khởi động lại dịch vụ SSH để áp dụng thay đổi. (Dùng 1 trong 2 lệnh sau tùy theo hệ điều hành)
Bash
sudo systemctl restart ssh
hoặc
Bash
sudo service sshd restart
Xong! Kể từ bây giờ, VPS của bạn chỉ chấp nhận đăng nhập bằng SSH Key. Mọi nỗ lực dò mật khẩu đều sẽ bị từ chối.
Passphrase là một lớp mật khẩu cho Private Key. Khi bạn dùng Private Key (để đăng nhập VPS), hệ thống sẽ hỏi passphrase này.
Ưu điểm: Tăng bảo mật. Nếu ai đó trộm được file Private Key của bạn, họ cũng không dùng được nếu không biết passphrase.
Nhược điểm: Mất đi sự tiện lợi "đăng nhập 1-click" (vì bạn phải gõ passphrase mỗi lần).
Khuyên dùng: Nếu bạn ưu tiên bảo mật tuyệt đối, hãy dùng. Nếu bạn ưu tiên sự tiện lợi, có thể bỏ qua.
Được, và đây là điều nên làm. Bạn chỉ cần tạo một cặp Public/Private Key duy nhất trên máy tính cá nhân của mình. Sau đó, bạn dùng Public Key đó (cùng một đoạn text ssh-rsa...) để thêm vào file authorized_keys trên tất cả các VPS bạn quản lý.
Private Key không thể khôi phục. Nếu bạn mất nó, bạn mất "chìa khóa".
Giải pháp: Hầu hết các nhà cung cấp VPS (như DigitalOcean, Vultr) đều có tính năng "Access Console" (Bảng điều khiển truy cập) qua website của họ. Bạn có thể dùng Console này để đăng nhập vào VPS (thường bằng mật khẩu root được reset) và thêm một Public Key mới vào file authorized_keys, sau đó tạo lại cặp key mới trên máy tính của bạn.
Đây là lỗi phổ biến nhất. 99% nguyên nhân là do:
Sai quyền (Permission): Bạn chưa chạy chmod 700 ~/.ssh và chmod 600 ~/.ssh/authorized_keys trên VPS. Đây là lý do phổ biến nhất.
Sai Key: Bạn load nhầm Private Key trên PuTTY, hoặc Public Key bạn dán vào authorized_keys bị sai/thiếu.
Sai User: Bạn đang cố đăng nhập bằng user root trong khi Public Key được thêm cho user ubuntu.
Việc chuyển đổi từ mật khẩu sang SSH Key có thể là một bước có chút kỹ thuật, nhưng qua hướng dẫn chi tiết vừa rồi, bạn có thể thấy nó hoàn toàn nằm trong tầm tay.
Hoàn thành các bước này đồng nghĩa với việc bạn đã đưa bảo mật VPS của mình lên một tiêu chuẩn chuyên nghiệp. Không còn nỗi lo bị dò mật khẩu, không còn sự phiền phức khi phải nhớ và gõ password. Những gì còn lại là trải nghiệm đăng nhập nhanh chóng và sự an tâm khi biết rằng máy chủ của bạn đang được bảo vệ bởi một "ổ khóa" gần như không thể bị bẻ gãy.
Đừng chần chừ, hãy áp dụng phương thức bảo mật này cho máy chủ của bạn ngay hôm nay.