Khi kết nối đến server sử dụng khóa SSH ssh user@hostname
, quá trình này diễn ra theo các bước sau:
- Connection Initiation: Client khởi tạo kết nối SSH đến server
- Server Identification: Server gửi public host key để chứng minh danh tính
- Authentication Method Negotiation: Client và server thống nhất sử dụng phương thức xác thực bằng public key
- Key-Based Authentication: Quá trình xác thực thực tế sử dụng khóa SSH
- Session Establishment: Sau khi xác thực thành công, phiên làm việc bảo mật bắt đầu
Hãy phân tích chi tiết từng bước.
1. Connection Initiation
Khi bạn chạy lệnh như ssh user@server
, SSH client của bạn bắt đầu thiết lập kết nối TCP đến cổng SSH của server (thường là cổng 22).
2. Server Identification
- Sau khi kết nối, server gửi host key công khai để xác định danh tính của nó.
- Client của bạn kiểm tra khóa này đối chiếu với file
known_hosts
để xác minh danh tính của server và ngăn chặn tấn công man-in-the-middle. - Nếu đây là lần kết nối đầu tiên, bạn sẽ thấy:
The authenticity of host 'hostname (IP)' can't be established.
RSA key fingerprint is SHA256:xxxx.
Are you sure you want to continue connecting (yes/no)?
- Sau khi chấp nhận, host key được lưu trong
known_hosts
để xác minh trong tương lai
3. Authentication Method Negotiation
Client và server thương lượng về phương thức xác thực sẽ sử dụng. Khi xác thực bằng public key khả dụng, SSH thường sẽ thử phương thức này trước khi quay về xác thực bằng mật khẩu.
4. Key-Based Authentication
Đây là lúc khóa SSH được sử dụng:
- Client gửi một thông điệp đến server cho biết nó muốn xác thực bằng một public key cụ thể
- Server kiểm tra xem public key này có trong file
~/.ssh/authorized_keys
của người dùng hay không - Nếu tìm thấy, server tạo ra một thông điệp thử thách ngẫu nhiên và mã hóa nó bằng public key
- Chỉ người sở hữu private key tương ứng mới có thể giải mã thách thức này
- Client giải mã thách thức bằng private key của mình và gửi lại phản hồi
- Server xác minh phản hồi, chứng minh rằng client sở hữu private key
Quy trình này xác minh danh tính của client mà không phải truyền private key qua mạng.
5. Session Establishment
Một khi đã xác thực, một kênh bảo mật được thiết lập cho phần còn lại của phiên SSH, cho phép thực thi lệnh an toàn, truy cập terminal hoặc các tính năng khác của SSH.
Troubleshooting SSH Key Authentication
Nếu bạn gặp vấn đề với xác thực khóa SSH:
- Kiểm tra quyền truy cập file: Private keys nên có quyền 600 (
chmod 600 ~/.ssh/id_rsa
) - Xác minh rằng public key có trong file authorized_keys của server
- Kiểm tra cấu hình SSH của server để đảm bảo rằng xác thực bằng public key được bật
- Chạy SSH ở chế độ verbose (
ssh -v user@server
) để xem thông tin kết nối chi tiết - Xác nhận rằng khóa đã được tải vào SSH agent của bạn với
ssh-add -l
Kết luận
Xác thực khóa SSH là một phương thức mạnh mẽ và an toàn để truy cập vào các server từ xa. Bằng cách tuân thủ các best practices và hiểu rõ quy trình nền tảng, bạn có thể đảm bảo một kết nối suôn sẻ và an toàn mỗi khi sử dụng.