Cách Tạo SSH Key Từ A–Z: Linux, macOS, Windows & Thêm Vào VPS, GitHub

Cách tạo SSH Key là bước thiết lập bắt buộc nếu bạn muốn đăng nhập server an toàn, đẩy code lên Git mà không cần nhập mật khẩu, đồng thời chặn triệt để các cuộc tấn công brute force vào cổng SSH. Thay vì dùng password truyền thống dễ bị dò quét, SSH Key hoạt động dựa trên cặp khóa mật mã giúp việc quản trị máy chủ tại InterData trở nên an toàn và tiện lợi hơn. Bài viết này hướng dẫn chi tiết cách tạo và cấu hình SSH Key từ cơ bản đến nâng cao trên Linux, macOS và Windows.

SSH Key là gì? Tại sao nên dùng thay mật khẩu?

SSH Key là phương thức xác thực người dùng dựa trên cơ chế mã hóa bất đối xứng dành cho giao thức SSH. Mỗi bộ khóa gồm hai phần: Private Key được lưu bảo mật trên máy cá nhân và Public Key được đặt trên máy chủ đích hoặc dịch vụ Git.

SSH key

Khi bạn khởi tạo kết nối SSH, máy chủ sẽ gửi một thông điệp mã hóa bằng Public Key. Máy khách dùng Private Key tương ứng để giải mã và xác nhận danh tính mà không cần truyền mật khẩu qua mạng.

  • Miễn nhiễm với tấn công brute force: Khóa SSH có độ dài mã hóa rất lớn (từ 256-bit đường cong Elliptic đến 4096-bit RSA), khiến các botnet tự động dò mật khẩu hoàn toàn thất bại.
  • Tiện lợi khi thao tác tự động: Giúp kết nối nhanh chóng vào server hoặc chạy pipeline CI/CD mà không phải nhập mật khẩu thủ công ở mỗi phiên làm việc.
  • Phân quyền chuẩn xác: Bạn có thể thu hồi quyền truy cập của một thiết bị cụ thể bất kỳ lúc nào bằng cách xóa Public Key tương ứng khỏi danh sách được cấp phép trên server.

Thuê VPS InterData

CPU thế hệ mới, SSD NVMe U.2, hỗ trợ kỹ thuật 24/7

Cần máy chủ Linux riêng để triển khai dự án an toàn?

Khi đưa website, API, Docker hay các ứng dụng cá nhân lên môi trường Internet, việc sở hữu toàn quyền root và thiết lập SSH Key ngay từ đầu là tiêu chuẩn bắt buộc để chặn botnet dò quét. VPS InterData cung cấp phần cứng mạnh mẽ, hạ tầng mạng băng thông cao cùng đầy đủ các bản phân phối Linux phổ biến, giúp bạn làm chủ hạ tầng độc lập với chi phí hợp lý.

Xem Các Gói VPS Server Giá Tốt ⟶

ed25519 hay RSA: Nên chọn thuật toán nào khi thực hiện cách tạo SSH Key?

Khi tạo SSH Key, hai thuật toán phổ biến nhất hiện nay là Ed25519 (dựa trên Edwards-curve Digital Signature Algorithm) và RSA. Việc lựa chọn đúng thuật toán quyết định đến tốc độ bắt tay kết nối và mức độ an toàn mật mã của hệ thống.

Tiêu chí so sánh Ed25519 (Khuyên dùng) RSA (4096-bit) Đánh giá thực tế
Độ an toàn mật mã Rất cao, chống side-channel attack An toàn nếu dùng từ 3072-bit trở lên Ed25519 vượt trội về cấu trúc toán học
Tốc độ xử lý & xác thực Cực nhanh, tốn ít tài nguyên CPU Chậm hơn khi tạo và ký dữ liệu Ed25519 tối ưu cho kết nối lặp lại
Kích thước chuỗi khóa Ngắn gọn (khoảng 68 ký tự) Rất dài (hơn 500 ký tự với bản 4096) Ed25519 dễ copy/paste thủ công hơn
Khả năng tương thích Hỗ trợ từ OpenSSH 6.5+ (năm 2014) Tương thích hầu hết thiết bị cổ điển Chỉ chọn RSA cho hệ điều hành rất cũ

Khuyến nghị: Hãy luôn ưu tiên tạo khóa Ed25519. Bạn chỉ nên dùng RSA 4096-bit trong trường hợp máy chủ hoặc thiết bị mạng sử dụng các bản OpenSSH đời cũ trước phiên bản 6.5.

Cách tạo SSH Key trên Linux và macOS chuẩn xác từng bước

Trên các hệ điều hành Linux (Ubuntu, Debian, CentOS, Fedora…) và macOS, bộ công cụ OpenSSH đã được cài đặt mặc định trong Terminal. Quy trình tạo khóa diễn ra trực tiếp qua câu lệnh ssh-keygen.

1/ Mở ứng dụng Terminal trên máy tính của bạn.

2/ Chạy lệnh tạo SSH Key với thuật toán Ed25519:

ssh-keygen -t ed25519 -C "[email protected]"

(Trường hợp cần dùng RSA 4096-bit cho hệ thống cũ: ssh-keygen -t rsa -b 4096 -C "[email protected]")

-t ed25519: Chỉ định loại thuật toán mã hóa.

-C "[email protected]": Thêm nhãn ghi chú nhận diện (thường đặt email hoặc tên máy).

Tạo SSH key trên Linux và macOS

3/ Chọn vị trí lưu file khóa:

Hệ thống sẽ hiển thị lời nhắc lưu file:

Enter file in which to save the key (/home/username/.ssh/id_ed25519):

Nhấn Enter để chọn vị trí mặc định tại thư mục ~/.ssh/.

4/ Thiết lập mật khẩu bảo vệ (Passphrase):

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Nhập mật khẩu phụ để mã hóa Private Key trên máy hoặc nhấn Enter 2 lần nếu muốn bỏ qua (đăng nhập hoàn toàn tự động không cần gõ phím).

5/ Kiểm tra Public Key vừa tạo:Sử dụng lệnh cat để đọc nội dung Public Key phục vụ cho việc gắn lên server hoặc Git:

cat ~/.ssh/id_ed25519.pub

Cách tạo SSH Key trên Windows bằng PowerShell và PuTTYgen

Người dùng Windows có thể lựa chọn tạo SSH Key bằng PowerShell (hỗ trợ sẵn từ Windows 10/11) hoặc thông qua giao diện đồ họa của phần mềm PuTTYgen nếu quen sử dụng kết nối qua PuTTY.

Phương pháp 1: Dùng PowerShell hoặc Windows Terminal (Khuyên dùng)

Windows 10 (bản cập nhật 1809 trở lên) và Windows 11 đã tích hợp sẵn OpenSSH Client. Bạn thực hiện thao tác hoàn toàn tương tự môi trường Linux:

  1. Nhấn phím Windows + X, chọn Windows Terminal hoặc PowerShell.
  2. Thực thi câu lệnh tạo khóa:
    ssh-keygen -t ed25519 -C "[email protected]"
  3. Nhấn Enter 3 lần liên tiếp để đồng ý lưu file vào đường dẫn mặc định C:\Users\<Tên_User>\.ssh\id_ed25519 và bỏ qua passphrase.
  4. Xem Public Key bằng lệnh:
    type $HOME\.ssh\id_ed25519.pub

Tạo SSH key trên Windows

Phương pháp 2: Dùng PuTTYgen trên Windows

Nếu bạn đang quản trị server qua phần mềm PuTTY, công cụ PuTTYgen đi kèm sẽ giúp sinh khóa dạng file .ppk chuyên biệt của phần mềm này:

  1. Mở ứng dụng PuTTYgen (PuTTY Key Generator).
  2. Tại mục Parameters ở dưới cùng, chọn kiểu khóa EdDSA (hoặc RSA với Number of bits đặt thành 4096).
  3. Nhấn nút Generate và di chuyển chuột ngẫu nhiên liên tục trong vùng trống của cửa sổ ứng dụng để tạo tính ngẫu nhiên mã hóa.
  4. Sau khi sinh khóa xong:
    • Copy toàn bộ chuỗi text trong khung “Public key for pasting into OpenSSH authorized_keys file” để dán lên server.
    • Nhấn Save private key để lưu file đuôi .ppk vào một thư mục bảo mật trên máy tính.

Cách thêm SSH Key vào VPS Linux để đăng nhập không cần mật khẩu

Sau khi đã có cặp khóa, bạn cần đẩy Public Key lên máy chủ ảo VPS để server nhận diện phiên kết nối.

Cách 1: Sử dụng lệnh ssh-copy-id (dành cho Linux / macOS)

Tiếp tục trên máy tính của bạn, sử dụng lệnh ssh-copy-id để tự động sao chép public key vào đúng thư mục và phân quyền chính xác trên server đích:

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@IP_SERVER_CUA_BAN

Nhập mật khẩu SSH của server lần cuối cùng khi được hỏi. Hệ thống sẽ báo xác nhận khóa đã được thêm thành công.

Cách 2: Cấu hình thủ công qua file authorized_keys (dành cho Windows & mọi môi trường)

Nếu lệnh tự động không khả dụng hoặc dùng Windows, bạn đăng nhập vào server bằng mật khẩu như bình thường và thao tác trực tiếp trên server:

1/ Tạo thư mục .ssh tại thư mục home của user (nếu chưa có) và gán quyền bảo mật:

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

2/ Mở file danh sách khóa cấp phép:

nano ~/.ssh/authorized_keys

3. Dán toàn bộ chuỗi Public Key (nội dung file id_ed25519.pub) vào một dòng mới. sau đó nhấn Ctrl + O để lưu và Ctrl + X để thoát.

Tip: Lấy nội dung Public key nhanh bằng lệnh Get-Content ~/.ssh/id_ed25519.pub

Thêm SSH Key vào VPS Linux

4/ Thiết lập phân quyền nghiêm ngặt cho file authorized_keys:

chmod 600 ~/.ssh/authorized_keys

5/ Kiểm tra đăng nhập lại từ máy cá nhân mà không cần gõ password:

ssh root@IP_SERVER_CUA_BAN

aaaa

Săn Ưu Đãi VPS & Cloud Server Siêu Tiết Kiệm

Canh Me tổng hợp các chương trình ưu đãi, mã giảm giá và Hot Deals máy chủ mới nhất tại InterData. Hãy kiểm tra danh sách ưu đãi trước khi đặt mua dịch vụ.

Xem Hot Deals Tại Canh Me ⟶

Cách thêm SSH Key vào GitHub và GitLab để push code an toàn

Các hệ thống quản lý mã nguồn Git đã ngừng hỗ trợ xác thực bằng tài khoản/mật khẩu trực tiếp khi clone hay push mã nguồn. Sử dụng SSH Key là tiêu chuẩn an toàn trên nền tảng GitHub và GitLab.

1/ Đọc và sao chép toàn bộ nội dung Public Key trên máy cá nhân:

cat ~/.ssh/id_ed25519.pub

2/ Truy cập vào tài khoản GitHub hoặc GitLab:

  • GitHub: Nhấp vào Avatar góc phải trên → Settings → SSH and GPG keys → Nhấn New SSH key.
  • GitLab: Chọn Preferences → SSH Keys → Nhấn Add new key.

3/ Tại mục Title: Đặt tên nhận diện thiết bị (ví dụ: Laptop-Ubuntu-Work).

4/ Tại mục Key: Dán chuỗi mã Public Key đã copy ở Bước 1 → Nhấn Add SSH key.

Thêm SSH Key vào GitHub và GitLab

5/ Kiểm tra kết nối xác thực từ máy tính đến GitHub bằng Terminal:

ssh -T [email protected]

6/ Nếu thấy thông báo: “Hi username! You’ve successfully authenticated…” nghĩa là kết nối đã hoàn tất thành công.

Bảo mật nâng cao cho server sau khi thiết lập SSH Key

Chỉ tạo SSH Key là chưa đủ. Để hoàn thiện các cách bảo mật VPS hiệu quả, bạn cần chặn cơ chế đăng nhập bằng mật khẩu và dựng tường lửa bảo vệ cổng kết nối.

1. Vô hiệu hóa tính năng Password Authentication

Lưu ý quan trọng: Chỉ thực hiện bước này sau khi bạn đã kiểm tra và đăng nhập thành công vào server bằng SSH Key trên một tab Terminal riêng.

  1. Mở file cấu hình SSH Daemon trên server:
    sudo nano /etc/ssh/sshd_config
  2. Tìm và chỉnh sửa các dòng sau (bỏ dấu # nếu đang bị comment):
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    PubkeyAuthentication yes
  3. Khởi động lại dịch vụ SSH để áp dụng cấu hình:
    sudo systemctl restart sshd

    (Trên Debian/Ubuntu cũ dùng: sudo systemctl restart ssh)

2. Thiết lập Firewall và công cụ chống tấn công

  • Tiến hành cấu hình UFW trên Ubuntu để chỉ mở các port cần thiết như SSH (port 22 hoặc port tùy chỉnh), HTTP (80) và HTTPS (443).
  • Kết hợp cài Fail2Ban chống brute force nhằm tự động cô lập và chặn dải IP có hành vi quét cổng bất thường trên hệ thống.

Cloud Server InterData

Nâng hạ tài nguyên tức thì, mạng băng thông cao

Môi trường Production cần hạ tầng mở rộng linh hoạt?

Khi triển khai hạ tầng cho đội nhóm nhiều lập trình viên cùng quản lý khóa SSH, Cloud Server InterData cho phép bạn linh hoạt thay đổi CPU/RAM mà không làm gián đoạn hệ thống hay mất cấu hình bảo mật máy chủ đã thiết lập.

Xem Bảng Giá Cloud Server ⟶

SSH Key không hoạt động: Cách kiểm tra và xử lý lỗi thường gặp

Trong quá trình cấu hình, nếu gặp lỗi không thể đăng nhập, bạn hãy bật chế độ debug bằng cờ -v hoặc -vvv để xem thông báo chi tiết: ssh -vvv root@IP_SERVER.

Lỗi 1: Permission denied (publickey)

  • Nguyên nhân: Khóa Public Key chưa được dán đúng vào file authorized_keys, Private Key không nằm đúng vị trí máy client, hoặc dịch vụ SSH trên server đã tắt phương thức PubkeyAuthentication.
  • Cách xử lý: Đăng nhập bằng console qua trang quản trị VPS, kiểm tra nội dung file ~/.ssh/authorized_keys đảm bảo toàn bộ khóa nằm trên một dòng duy nhất, không bị ngắt quãng.

Lỗi 2: Sai phân quyền thư mục ~/.ssh hoặc authorized_keys

  • Nguyên nhân: OpenSSH áp dụng cơ chế StrictModes, tự động từ chối xác thực nếu thư mục .ssh hoặc file authorized_keys có quyền ghi mở rộng cho các user khác (như 777 hoặc 775).
  • Cách xử lý: Chạy các lệnh sau trên server để khôi phục phân quyền chuẩn:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    chown -R $USER:$USER ~/.ssh

Lỗi 3: Lỗi Private Key “Permissions are too open” (Windows / macOS)

  • Nguyên nhân: File Private Key (id_ed25519) trên máy cá nhân bị cấp quyền quá rộng khiến SSH Client từ chối nạp khóa vì lý do an toàn.
  • Cách xử lý:Trên Linux/macOS, chạy: chmod 600 ~/.ssh/id_ed25519.Trên Windows PowerShell, chạy lệnh thiết lập quyền hạn độc quyền cho user:
    icacls $HOME\.ssh\id_ed25519 /inheritance:r
    icacls $HOME\.ssh\id_ed25519 /grant:r "$($env:USERNAME):(R)"

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

1. Một cặp SSH Key có thể dùng cho nhiều server cùng lúc không?

Có. Bạn có thể sao chép cùng một chuỗi Public Key vào file authorized_keys của nhiều máy chủ hoặc thêm vào nhiều tài khoản Git khác nhau. Khi kết nối, máy tính cá nhân sẽ sử dụng chung Private Key tương ứng để xác thực danh tính nhanh chóng.

2. Passphrase của SSH Key là gì và có bắt buộc phải đặt không?

Passphrase là mật khẩu dùng để mã hóa chính file Private Key lưu trên ổ cứng của bạn. Mục này không bắt buộc. Tuy nhiên, nếu máy tính của bạn dùng chung hoặc có nguy cơ bị lộ file, đặt Passphrase sẽ ngăn người khác dùng trộm Private Key.

3. Làm thế nào để biết SSH Key đã được nạp và hoạt động?

Bạn có thể kiểm tra danh sách khóa đang nạp trong SSH Agent bằng lệnh ssh-add -l. Ngoài ra, khi thực hiện lệnh kết nối ssh root@IP_SERVER, nếu hệ thống truy cập thẳng vào giao diện dòng lệnh của máy chủ mà không hỏi mật khẩu tài khoản thì khóa đã hoạt động chuẩn xác.

4. Nếu lỡ làm mất Private Key trên máy tính thì phải xử lý thế nào?

Do tính bảo mật toán học, bạn không thể khôi phục lại Private Key đã mất. Bạn cần truy cập vào server thông qua cổng VNC/Console trên bảng điều khiển hosting để xóa Public Key cũ trong file authorized_keys, sau đó thực hiện tạo lại cặp khóa SSH mới từ máy tính.

5. Có thể đổi mật khẩu Passphrase của SSH Key sau khi tạo không?

Hoàn toàn được. Bạn có thể đổi hoặc gỡ bỏ Passphrase mà không cần tạo lại khóa mới bằng cách chạy lệnh: ssh-keygen -p -f ~/.ssh/id_ed25519. Hệ thống sẽ yêu cầu bạn nhập Passphrase cũ trước khi nhập chuỗi Passphrase mới.

Lời kết

Nắm vững cách tạo SSH Key giúp bạn chuẩn hóa quy trình quản trị hạ tầng mạng, loại bỏ nguy cơ rò rỉ dữ liệu qua hình thức brute force mật khẩu và tối ưu tốc độ triển khai mã nguồn trên GitHub/GitLab. Sau khi đã cấu hình khóa thành công và tắt xác thực mật khẩu, hệ thống của bạn đã đạt mức độ an toàn cao hơn rất nhiều. Hãy bắt đầu áp dụng ngay trên các máy chủ thử nghiệm trước khi đưa vào vận hành trên môi trường thực tế.

Nội dung mang tính tham khảo kỹ thuật. Cú pháp câu lệnh và đường dẫn cấu hình có thể thay đổi tùy thuộc vào phiên bản hệ điều hành Linux (Ubuntu, Debian, CentOS), hệ điều hành máy khách (Windows, macOS) và phiên bản OpenSSH đang hoạt động. Bạn nên kiểm tra kỹ trước khi vô hiệu hóa phương thức đăng nhập mật khẩu trên các máy chủ thực tế.