Nếu anh em đang làm Developer hay Sysadmin, SSH Key chắc chắn là công cụ làm việc mỗi ngày. Thông lệ xưa nay là tạo key bằng ssh-keygen -t ed25519, đặt thêm passphrase rồi yên tâm rằng server đã ‘kín cổng cao tường’.
Nhưng hãy nhìn vào thực tế: Chỉ cần một phút lơ là commit nhầm file id_ed25519 lên GitHub, hoặc máy tính vô tình dính malware, mọi thứ sẽ nằm ngoài tầm kiểm soát. Theo báo cáo của GitGuardian, hàng triệu ‘secret’ bị lộ mỗi năm trên các repo public. Lúc đó, dù passphrase có dài đến đâu, hacker vẫn có thể brute-force offline cực nhanh. Qua audit thực tế cho hơn 10 hệ thống gần đây, mình thấy 80% lỗ hổng đến từ việc quản lý file Private Key quá lỏng lẻo.
Cách hiệu quả nhất để ‘chốt hạ’ vấn đề này là dùng Hardware Security Key (như Yubikey hoặc các dòng khóa FIDO2). Với phương pháp này, Private Key nằm chết trong chip bảo mật. Hacker có lấy được file key trên máy cũng chẳng thể làm gì nếu không có cái chạm tay xác nhận trên thiết bị vật lý.
Quick start: Setup SSH với Yubikey trong 5 phút
Dành cho anh em đang sẵn khóa trên tay. Mình giả định bạn đang dùng Ubuntu, macOS và khóa có hỗ trợ giao thức FIDO2.
Bước 1: Kiểm tra phiên bản OpenSSH
Tính năng hỗ trợ FIDO2 (gọi là sk – Security Key) yêu cầu OpenSSH từ bản 8.2 trở lên. Bạn kiểm tra nhanh bằng lệnh:
ssh -V
Nếu phiên bản thấp hơn 8.2, bạn cần nâng cấp OS hoặc cài bản OpenSSH mới hơn để tiếp tục nhé.
Bước 2: Tạo Key trực tiếp trên khóa
Cắm Yubikey vào cổng USB và thực hiện lệnh sau:
ssh-keygen -t ed25519-sk -C "[email protected]"
Ngay lúc này, đèn trên khóa sẽ nhấp nháy. Bạn chỉ cần chạm nhẹ vào vòng tròn kim loại để xác nhận sự hiện diện (User Presence). Sau đó, hãy đặt passphrase cho file handle như bình thường.
Bước 3: Đưa Public Key lên Server
Sử dụng lệnh quen thuộc để đẩy key lên server mục tiêu:
ssh-copy-id -i ~/.ssh/id_ed25519_sk user@your_server_ip
Mọi thứ đã sẵn sàng! Từ giờ khi đăng nhập, server sẽ yêu cầu bạn chạm vào khóa. Không chạm, không vào được. Cảm giác cực kỳ an tâm.
Tại sao Hardware Key lại ‘out trình’ so với SSH Key truyền thống?
Nhiều bạn thắc mắc: ‘Nếu vẫn sinh ra file id_ed25519_sk trên máy, vậy mất file đó thì có sao không?’.
Đây là điểm khác biệt của FIDO2/U2F. File bạn thấy thực chất chỉ là Key Handle (mảnh ghép định danh), không phải Private Key thật. Chìa khóa thật nằm sâu trong chip bảo mật và không bao giờ xuất hiện dưới dạng file để ai đó có thể sao chép.
- Với SSH Key thường: File trên ổ cứng là tất cả. Mất file + lộ passphrase = Mất quyền kiểm soát Server.
- Với SSH FIDO2 (sk): Chìa khóa = File handle + Khóa vật lý. Hacker có lấy được file cũng vô dụng nếu không cầm chiếc Yubikey của bạn trong tay.
Đây chính là xác thực đa yếu tố (MFA) ngay tại lớp giao thức SSH. Bạn không cần cài thêm Google Authenticator hay cấu hình script phức tạp trên server nữa.
Nâng cao: Resident Keys (Chìa khóa ‘nằm vùng’)
Trên các dòng Yubikey đời mới (như Series 5), tính năng Resident Keys là một bước tiến lớn về sự tiện lợi.
Thông thường, khi sang máy tính mới, bạn phải copy file handle đi cùng. Với Resident Key, mảnh ghép này được lưu trực tiếp vào bộ nhớ của Yubikey. Hãy thêm option -O resident khi tạo:
ssh-keygen -t ed25519-sk -O resident -O verify-required
(Lưu ý: verify-required buộc bạn nhập PIN của khóa trước khi chạm, tạo thành bảo mật 3 lớp: Cái bạn có, cái bạn biết và cái bạn làm).
Khi đổi máy làm việc, bạn chỉ cần cắm khóa vào và gõ:
ssh-add -K
Lệnh này tự động ‘tải’ key từ Yubikey vào SSH Agent của máy hiện tại. Bạn không cần bận tâm việc copy file thủ công nữa.
Hardening: Cấu hình Server chỉ chấp nhận Hardware Key
Đừng dừng lại ở việc tạo key, hãy khóa chặt cửa từ phía Server để đảm bảo an toàn tuyệt đối. Chúng ta sẽ cấu hình để server từ chối mọi loại key thường.
Mở file cấu hình SSH trên server:
sudo nano /etc/ssh/sshd_config
Thêm dòng sau để chỉ chấp nhận các thuật toán có hậu tố -sk:
PubkeyAcceptedAlgorithms [email protected],[email protected]
Lưu lại và restart service:
sudo systemctl restart ssh
Bây giờ, kể cả khi hacker có hàng triệu private key truyền thống, họ cũng sẽ bị server từ chối ngay từ vòng gửi xe.
Kinh nghiệm thực tế khi triển khai
Security luôn là sự đánh đổi. Dưới đây là 4 lưu ý ‘xương máu’ giúp bạn triển khai mượt mà hơn:
- Luôn có phương án dự phòng: Đừng bao giờ chỉ dùng 1 khóa duy nhất. Nếu mất hoặc hỏng (dù tỉ lệ cực thấp), bạn sẽ bị lockout. Hãy mua ít nhất 2 cái (ví dụ Yubikey 5 NFC giá khoảng 1.2 triệu), setup cả hai và cất một chiếc làm backup.
- Thiết lập FIDO2 PIN: Tuyệt đối không để khóa ‘trống’. PIN giúp ngăn chặn kẻ xấu sử dụng khóa ngay cả khi họ nhặt được nó trên bàn làm việc của bạn.
- Lưu ý với WSL2: Trên Windows, việc map USB vào Linux hơi rắc rối. Bạn cần cài
usbipdđể WSL có thể nhận diện được Yubikey. - Độ tương thích OS: Một số hệ điều hành cũ như CentOS 7 sẽ không hỗ trợ
ed25519-sk. Trong trường hợp đó,ecdsa-sklà phương án thay thế có độ tương thích cao hơn.
Trong thời buổi server bị dòm ngó 24/7, đầu tư một chiếc khóa bảo mật là quyết định cực kỳ xứng đáng. Nó giúp bạn ngủ ngon hơn, gạt bỏ nỗi lo về việc lộ lọt Private Key. Nếu gặp lỗi sign_and_send_pubkey: signing failed, hãy kiểm tra xem máy local đã cài thư viện libfido2 chưa nhé!

