Khi bạn SSH vào VPS bằng key, cơ chế “ký” (signing) thực chất là một quá trình xác thực bằng mật mã bất đối xứng, không phải gửi mật khẩu hay gửi private key lên server.
Mình sẽ giải thích theo đúng bản chất kỹ thuật bên trong, để bạn hiểu rõ cơ chế hoạt động.
SSH sử dụng cặp khóa:
~/.ssh/authorized_keys)Ví dụ bạn dùng:
Giả sử bạn chạy:
ssh root@your_vps_ip
Quy trình xác thực bằng chữ ký diễn ra như sau:
Máy bạn (SSH client) kết nối tới:
TCP port 22 của VPS
Sau đó hai bên sẽ:
⚠ Lưu ý: Đây mới chỉ là tạo đường truyền mã hóa. Chưa xác thực người dùng.
Server hỏi:
Bạn là ai?
Client trả lời:
Tôi muốn đăng nhập bằng public key này
Client gửi:
Server kiểm tra:
Public key này có nằm trong ~/.ssh/authorized_keys không?
Nếu có → chuyển sang bước ký
Đây là phần quan trọng nhất.
Server KHÔNG yêu cầu bạn gửi private key.
Thay vào đó:
Ví dụ:
abcxyz123random_data
Sau đó gửi cho client.
Client thực hiện:
signature = sign(challenge, private_key)
Signature này là một giá trị mật mã.
Server nhận chữ ký và dùng public key để kiểm tra:
verify(signature, challenge, public_key)
Nếu:
Đúng → bạn chứng minh được bạn có private key Sai → từ chối
Đây gọi là:
Challenge-Response Authentication
Quy trình thực tế:
Client → Server : Tôi có public key này Server → Client : Đây là challenge ngẫu nhiên Client → Server : Đây là chữ ký của challenge Server → Client : OK, đăng nhập thành công
An toàn hơn rất nhiều.
Nếu bạn đặt passphrase cho private key:
Hiện nay nên dùng:
Tạo key:
ssh-keygen -t ed25519
SSH không gửi private key.
Nó hoạt động theo cơ chế:
Server đưa ra thử thách Client dùng private key ký thử thách Server dùng public key xác minh
Đây là cơ chế chữ ký số dựa trên mật mã bất đối xứng.