Tới nội dung
Cloudj

Hướng dẫn VPS

Tạo SSH key cho VPS và đăng nhập trên Windows, macOS, Linux

Hướng dẫn tạo SSH key cho VPS bằng ssh-keygen ed25519 trên Windows, macOS, Linux, thêm key trước khi triển khai, đăng nhập và xử lý các lỗi thường gặp.

Cập nhật · 5 phút đọc

Đăng nhập VPS Linux bằng SSH key là cách đúng đắn. Key khó đoán hơn bất kỳ mật khẩu nào, cho phép bạn tắt hẳn đăng nhập bằng mật khẩu, và khi đã nạp vào agent thì bạn không phải gõ mật khẩu máy chủ thêm lần nào nữa. Bài này hướng dẫn tạo SSH key cho VPS theo chuẩn ed25519 trên Windows, macOS và Linux, thêm key trước khi triển khai để máy chủ tin key ngay từ lần khởi động đầu, đăng nhập, và xử lý những lỗi hay gặp nhất.

Nếu vẫn đang chọn nơi đặt máy chủ, bạn có thể xem hướng dẫn các vị trí VPS với đầy đủ các khu vực Cloudj cung cấp.

SSH key hoạt động thế nào

ssh-keygen tạo ra một cặp file. Private key (ví dụ id_ed25519) nằm trên máy tính của bạn và không bao giờ rời khỏi đó. Public key (id_ed25519.pub) có thể chia sẻ thoải mái; bạn đặt nó lên các máy chủ cần truy cập, trong file ~/.ssh/authorized_keys. Khi kết nối, máy chủ kiểm tra xem bạn có giữ private key khớp với một trong các public key của nó hay không, mà private key không hề đi qua mạng. Hãy đặt passphrase cho private key, để mất laptop không đồng nghĩa với mất luôn quyền kiểm soát máy chủ.

Bước 1: tạo SSH key cho VPS

Ed25519 là lựa chọn mặc định hiện nay: key ngắn, nhanh và được mọi bản OpenSSH hiện hành hỗ trợ. Chỉ dùng RSA 4096 bit cho những hệ thống rất cũ không nhận ed25519.

Trên macOS và Linux

Mở Terminal và chạy:

ssh-keygen -t ed25519 -C "your-name@laptop"

Nhấn Enter để giữ đường dẫn mặc định ~/.ssh/id_ed25519, rồi nhập passphrase. Phần chú thích -C chỉ là nhãn giúp bạn nhận ra key sau này.

Trên Windows 10 và 11

Windows có sẵn OpenSSH client. Mở PowerShell (không cần quyền administrator) và chạy đúng lệnh trên:

ssh-keygen -t ed25519 -C "your-name@laptop"

Key được lưu trong C:\Users\YOUR_USER\.ssh\. Nếu máy báo không tìm thấy ssh-keygen, hãy thêm tính năng "OpenSSH Client" trong Settings, mục System, Optional features.

Xem public key

Bạn cần nội dung file .pub cho bước tiếp theo. Trên macOS và Linux:

cat ~/.ssh/id_ed25519.pub

Trên Windows PowerShell:

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub

Kết quả là một dòng duy nhất bắt đầu bằng ssh-ed25519. Hãy sao chép nguyên cả dòng. Tuyệt đối không dán nội dung file không có đuôi .pub, vì đó là private key của bạn.

Bước 2: thêm key trước khi triển khai

Cách gọn gàng nhất là đưa key cho máy chủ ngay lúc tạo. Trong console Cloudj, hãy thêm public key vào tài khoản rồi chọn key đó khi triển khai máy chủ Linux. Máy chủ khởi động với key đã nằm sẵn trong authorized_keys của root, nên lần đăng nhập đầu tiên đã dùng key.

Cloudj cũng tạo sẵn một mật khẩu root mà bạn xem được trên trang máy chủ. Bạn có thể dùng SSH key, mật khẩu hoặc cả hai. Lời khuyên của chúng tôi là đăng nhập bằng key, sau đó tắt đăng nhập mật khẩu trong checklist bảo mật VPS trong giờ đầu tiên. Windows server thì khác: chúng dùng đăng nhập bằng mật khẩu qua RDP, nên bài này không áp dụng.

Bước 3: đăng nhập

Dùng IP public của máy chủ hiển thị trong console:

ssh [email protected]

Lần đầu, SSH sẽ hỏi bạn xác nhận fingerprint của máy chủ. Gõ yes. Từ đó trở đi, SSH sẽ cảnh báo nếu fingerprint thay đổi, giúp bạn tránh kết nối nhầm vào một máy mạo danh.

Nếu key không nằm ở đường dẫn mặc định, hãy chỉ rõ:

ssh -i ~/.ssh/cloudj_ed25519 [email protected]

Bước 4: gõ ít hơn nhờ file config

Tạo hoặc sửa ~/.ssh/config (trên Windows là C:\Users\YOUR_USER\.ssh\config) và thêm một mục cho mỗi máy chủ:

Host web1
    HostName 203.0.113.10
    User deploy
    IdentityFile ~/.ssh/id_ed25519

Giờ chỉ cần gõ ssh web1. Alias này cũng dùng được với scp, rsync và các trình soạn thảo kết nối qua SSH như VS Code.

Bước 5: không phải gõ lại passphrase

SSH agent giữ key đã mở khóa trong bộ nhớ suốt phiên làm việc.

Trên macOS, lưu passphrase vào Keychain:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Trên Linux desktop thường đã có agent chạy sẵn; nếu chưa, hãy khởi động và thêm key:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Trên Windows, bật dịch vụ agent một lần từ PowerShell quyền administrator, rồi thêm key từ PowerShell thường:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519

Thêm key vào máy chủ đang chạy

Nếu máy chủ đã chạy và bạn đăng nhập được bằng mật khẩu, hãy chép key sang. Trên macOS và Linux:

ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]

Windows không có ssh-copy-id, nên hãy dùng pipe trong PowerShell:

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Mất quyền truy cập hoàn toàn? Hãy dùng SSH console trên trình duyệt ở trang máy chủ trong console, hoặc đặt lại mật khẩu root tại đó, rồi thêm key.

Lưu ý cho người dùng PuTTY

PuTTY dùng định dạng key riêng là .ppk. Bạn có hai cách:

  • Tạo key bằng PuTTYgen: chọn EdDSA với Ed25519, bấm Generate, đặt passphrase và lưu private key dưới dạng .ppk. Sao chép public key trong ô phía trên cửa sổ, vốn đã ở định dạng OpenSSH, rồi thêm vào console.
  • Hoặc dùng lại key tạo bằng ssh-keygen: mở PuTTYgen, chọn Conversions, Import key, chọn file id_ed25519, rồi lưu thành .ppk.

Trong PuTTY, nạp file .ppk ở mục Connection, SSH, Auth, Credentials (bản cũ hơn là Connection, SSH, Auth). Ngày nay phần lớn người dùng Windows có thể bỏ qua PuTTY và dùng luôn lệnh ssh có sẵn trong PowerShell hoặc Windows Terminal.

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

LỗiNguyên nhân thường gặpCách xử lý
Permission denied (publickey)Sai key, sai user hoặc key chưa có trên máy chủKiểm tra tên user, dùng -i, xác nhận key trong authorized_keys
UNPROTECTED PRIVATE KEY FILEPrivate key bị người khác đọc đượcchmod 600 ~/.ssh/id_ed25519
Connection timed outFirewall chặn hoặc sai IPKiểm tra IP và cổng 22 đã được mở
REMOTE HOST IDENTIFICATION HAS CHANGEDMáy chủ được cài lại với cùng IPssh-keygen -R 203.0.113.10 rồi kết nối lại

Với các lỗi khác, hãy chạy ssh -v [email protected] để xem key nào được gửi đi và vì sao bị từ chối. Trên máy chủ, thư mục ~/.ssh cần quyền 700 và file authorized_keys cần quyền 600, thuộc sở hữu của user bạn dùng để đăng nhập.

Khi đã vào được, nếu phiên SSH có vẻ ì ạch, hãy đo chất lượng kết nối bằng cách kiểm tra ping VPS bằng ping và mtr, và xem lại bài chọn vị trí VPS theo độ trễ nếu kết quả cao.

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

Nên dùng ed25519 hay RSA?

Dùng ed25519, trừ khi phải làm việc với hệ thống rất cũ không nhận loại này. Nếu cần RSA, hãy dùng 4096 bit với lệnh ssh-keygen -t rsa -b 4096.

Một key dùng cho nhiều máy chủ được không?

Được. Public key có thể đặt lên bao nhiêu máy chủ tùy ý. Nên dùng key riêng cho từng thiết bị, để khi cần thu hồi quyền của một laptop thì không ảnh hưởng tới các máy khác.

Có thật sự cần passphrase không?

Rất nên có. Không có passphrase, ai sao chép được file private key sẽ vào được mọi máy chủ tin key đó. Dùng agent thì mỗi phiên bạn chỉ phải gõ một lần.

Lỡ mất private key thì làm sao?

Tạo key mới, đăng nhập qua console trên trình duyệt hoặc bằng mật khẩu root, thêm public key mới vào authorized_keys và xóa key cũ đi.

Triển khai với key của bạn

Hãy thêm public key trong console Cloudj, chọn key khi triển khai, và lần đăng nhập đầu tiên sẽ dùng key ngay. Bạn có thể xem các vị trí trên trang máy chủ cloud và giá trực tiếp trên trang bảng giá.

Triển khai máy chủ hoặc mua proxy

Chọn vị trí trong console, xem giá trực tiếp và thanh toán từ số dư tài khoản.