Net BasicsSố chữ 2243Thời gian đọc6 phút

Nhập môn Khóa SSH: Khóa công khai, Khóa riêng tư và file config

Hướng dẫn người mới phân biệt khóa công khai, khóa riêng tư, mật khẩu khóa (passphrase) và khóa máy chủ. Tạo cặp khóa riêng và dùng ~/.ssh/config để đơn giản hóa đăng nhập.

Ở bài trước, chúng ta đã kết nối VPS bằng SSH. Đăng nhập bằng mật khẩu tuy trực quan nhưng dễ gặp rủi ro mật khẩu yếu, dùng chung mật khẩu hoặc bị tấn công dò quét liên tục. Chuẩn mực quản trị an toàn dài hạn là sử dụng khóa SSH (SSH Keys).

Thuật ngữ "khóa công khai, khóa riêng tư, khóa máy chủ" rất dễ gây nhầm lẫn. Hãy ghi nhớ quy tắc cốt lõi: **Khóa người dùng chứng minh *bạn là ai*, còn khóa máy chủ xác nhận *bạn đang kết nối tới máy chủ nào*.**

1. Khóa công khai và Khóa riêng tư phối hợp ra sao

Hình dung như một ổ khóa gắn trên cửa và chiếc chìa khóa duy nhất bạn giữ bên mình:

TệpVị trí lưu trữCó được chia sẻ khôngMục đích
Khóa riêng tư (Private Key)Trên máy tính của bạnTUYỆT ĐỐI KHÔNGChứng minh người đăng nhập giữ đúng chìa khóa
Khóa công khai (.pub)Đặt trên máy chủCÓ THỂBáo cho máy chủ biết chìa khóa riêng tư nào được phép vào
Mật khẩu khóa (Passphrase)Ghi nhớ hoặc lưu KeychainTUYỆT ĐỐI KHÔNGBảo vệ tệp khóa riêng tư khi máy tính của bạn bị thất lạc

Máy chủ chỉ lưu khóa công khai và không bao giờ cần biết khóa riêng tư của bạn. Quá trình xác thực diễn ra bằng thuật toán mã hóa thách thức - phản hồi, khóa riêng tư không hề truyền qua mạng.

Vì vậy, nếu thấy bài viết nào yêu cầu bạn "tải khóa riêng tư lên máy chủ", đó là hướng dẫn sai lầm. Không đưa khóa riêng tư lên kho Git công khai, ảnh chụp màn hình, tin nhắn hay đám mây.

2. Tạo cặp khóa độc lập cho việc học VPS

Trên máy Mac hoặc Linux cục bộ của bạn, tạo một cặp khóa Ed25519 hiện đại:

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_vps_learning -C "vps-learning"

Giải thích tham số:

  • -t ed25519: Chọn thuật toán chữ ký Ed25519 hiện đại và an toàn;
  • -f: Đặt tên tệp riêng biệt để tránh ghi đè lên các khóa hiện có;
  • -C: Thêm ghi chú nhận diện (không ảnh hưởng tới xác thực).

Khi được hỏi passphrase, hãy đặt một mật khẩu bảo vệ mạnh. Sử dụng ssh-agent hoặc Keychain của hệ điều hành sẽ giúp bạn không phải nhập lại mật khẩu này trong mỗi lần kết nối.

Lệnh sẽ tạo ra hai tệp:

~/.ssh/id_ed25519_vps_learning       Khóa riêng tư (BÍ MẬT, cấm lộ ra ngoài)
~/.ssh/id_ed25519_vps_learning.pub   Khóa công khai (Đưa lên máy chủ)

3. Cài đặt khóa công khai lên máy chủ

Cách an toàn nhất là dán nội dung tệp .pub vào tính năng SSH Key trên bảng điều khiển của nhà cung cấp khi khởi tạo VPS. Nếu máy chủ đã có mật khẩu hoạt động, bạn có thể dùng lệnh ssh-copy-id.

Về bản chất, nội dung khóa công khai sẽ được ghi vào một dòng trong tệp của người dùng đích:

~/.ssh/authorized_keys

SSH kiểm tra quyền phân quyền tệp rất nghiêm ngặt. Thư mục ~/.ssh chỉ cho phép chủ sở hữu truy cập (chmod 700), tệp authorized_keys chỉ cho phép chủ sở hữu ghi (chmod 600). Nếu phân quyền quá lỏng lẻo, dịch vụ SSH sẽ từ chối xác thực.

Kiểm tra 3 điều:

1. Khóa công khai được đặt đúng thư mục người dùng Linux dự định; 2. Bạn đã sao chép nội dung tệp .pub, không phải tệp khóa riêng tư; 3. Trước khi tắt đăng nhập bằng mật khẩu, bạn đã thử đăng nhập bằng khóa thành công ở một cửa sổ khác.

4. Dùng file SSH config để rút gọn câu lệnh

Thay vì mỗi lần phải gõ ssh -i ~/.ssh/id_ed25519_vps_learning admin@203.0.113.10, hãy tạo tệp cấu hình ~/.ssh/config trên máy bạn:

Host learning-vps
  HostName 203.0.113.10
  User admin
  Port 22
  IdentityFile ~/.ssh/id_ed25519_vps_learning
  IdentitiesOnly yes

Từ giờ bạn chỉ cần gõ:

ssh learning-vps

Host là tên bí danh ngắn gọn bạn tự đặt; HostName là địa chỉ IP thực tế của máy chủ. IdentitiesOnly yes đảm bảo SSH chỉ sử dụng đúng khóa chỉ định, tránh xung đột khi bạn có nhiều khóa trên máy.

5. Phân biệt Khóa người dùng và Khóa máy chủ

Loại khóaBên giữ phần bí mậtTrả lời câu hỏi nào
Khóa người dùngNgười dùng đăng nhập"Người này có quyền đăng nhập không?"
Khóa máy chủSSH daemon trên máy chủ"Đây có đúng là máy chủ thật mà tôi muốn kết nối?"

Mã băm SHA256 hiển thị ở lần kết nối đầu tiên thuộc về khóa máy chủ. Nếu khóa máy chủ đột ngột thay đổi trong tương lai, hãy kiểm tra nguyên nhân trước khi xóa bản ghi trong known_hosts.

6. Trình tự chuyển đổi xác thực an toàn

Khi chuyển từ mật khẩu sang khóa SSH:

1. Kiểm tra Web Console cứu hộ hoạt động tốt; 2. Tạo tài khoản quản trị thông thường và cài đặt khóa công khai; 3. Giữ nguyên phiên làm việc hiện tại, mở terminal mới thử đăng nhập bằng khóa; 4. Xác nhận tài khoản mới có quyền thực thi lệnh sudo; 5. Chỉnh sửa sshd_config để tắt đăng nhập mật khẩu và tắt đăng nhập trực tiếp bằng root; 6. Mỗi lần sửa đổi đều mở phiên mới để kiểm tra và theo dõi log xác thực.

7. Quản lý vòng đời của khóa

  • Sử dụng các cặp khóa riêng biệt, có tên gọi rõ ràng cho từng thiết bị và mục đích;
  • Khi mất thiết bị hoặc nhân sự nghỉ việc, xóa ngay khóa công khai tương ứng khỏi authorized_keys;
  • Nếu nghi ngờ lộ khóa riêng tư, lập tức tạo cặp khóa mới, thay thế trên máy chủ và hủy khóa cũ;
  • Sao lưu khóa riêng tư bằng phương thức mã hóa an toàn và kiểm tra khả năng phục hồi;
  • Không xem việc "khóa không hết hạn" đồng nghĩa với việc "không bao giờ cần luân chuyển khóa".

8. Tổng kết

Khóa SSH không chỉ là một chuỗi mật khẩu dài hơn, mà là giải pháp phân tách ổ khóa công khai (.pub) và chìa khóa bí mật cục bộ. Sử dụng ~/.ssh/config giúp việc quản trị trở nên gọn gàng và an toàn.

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

Gửi file .pub cho người khác có an toàn không?

Khóa công khai vốn được thiết kế để phân phối, nhưng bạn chỉ nên đưa lên những hệ thống đáng tin cậy mà bạn cần quyền truy cập. Tệp khóa riêng tư thì tuyệt đối không được gửi cho bất kỳ ai.

Nếu đặt mật khẩu cho khóa riêng tư thì chạy cron job tự động thế nào?

Hãy dùng các khóa riêng chuyên dụng có phạm vi quyền hạn hẹp, ssh-agent, token ngắn hạn hoặc dịch vụ quản lý bí mật (Secret Management).

Có nên tắt hoàn toàn đăng nhập bằng mật khẩu không?

Nên tắt sau khi đã kiểm tra chắc chắn khóa SSH, quyền sudo và Web Console cứu hộ hoạt động ổn định.

Tài liệu tham khảo

Share

Chia sẻ bài viết