Thông điệp bạn đang thấy là một vấn đề riêng biệt. Đó là yêu cầu bạn xác nhận rằng máy chủ bạn đang kết nối thực sự là máy chủ mà bạn mong đợi. Từ máy chủ, bạn có thể lấy dấu vân tay bằng cách chạy ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
. Sau đó, khi bạn kết nối từ xa lần đầu tiên, bạn có thể chắc chắn rằng dấu vân tay khớp với nhau.
Các khóa máy chủ, được thấy trong hành động ở đây, giải quyết vấn đề của con người trong các cuộc tấn công ở giữa - có lẽ DNS đã bị phá hủy và bạn đang kết nối với máy của đối thủ thay vì của chính bạn. Máy đó thu thập thông tin đăng nhập của bạn và chuyển tiếp kết nối của bạn đến máy chủ thực, đánh cắp thông tin của bạn mà bạn không biết. Đảm bảo khớp khóa máy chủ ngăn chặn điều này xảy ra trừ khi kẻ tấn công thực sự đã đánh cắp khóa công khai của máy chủ của bạn.
Tuy nhiên, vẫn còn một vấn đề - làm thế nào để bạn biết khóa nào đúng? Sau kết nối đầu tiên, khóa chung được lưu trong ~/.ssh/known_hosts
tệp của bạn , vì vậy các kết nối tiếp theo sẽ ổn. Nhưng lần đầu tiên, bạn cần một số cách để lấy dấu vân tay, hoặc nếu không bạn theo mô hình "TOFU": tin tưởng khi sử dụng lần đầu.
Nhưng không ai trong số này có liên quan đến mật khẩu so với khóa, ngoại trừ cả khóa và mật khẩu đều có thể bị đánh cắp thông qua cuộc tấn công này - theo một nghĩa nào đó, đó là lỗ hổng mà bạn yêu cầu.
Có (ít nhất) ba lý do mật khẩu tệ hơn khóa:
- Họ có thể bị ép buộc. Mật khẩu 8 ký tự thông thường do người dùng chọn có khoảng 30 bit đoán-entropy. Một cặp khóa công khai / riêng ssh là 1024 bit hoặc lớn hơn. Thật sự không thể bắt buộc sử dụng khóa ssh, nhưng việc đoán mật khẩu tự động luôn xảy ra.
- Họ có thể bị câm. Người dùng thường xuyên chọn mật khẩu khủng khiếp, thậm chí có những hạn chế tại chỗ và họ có xu hướng sử dụng mật khẩu khó hơn ở nhiều nơi. Điều này rõ ràng làm cho các cuộc tấn công dễ dàng hơn.
- Mật khẩu có thể bị đánh cắp từ xa. Khi bạn đang sử dụng SSH, mật khẩu được mã hóa trên dây, nhưng rất phổ biến khi máy chủ ssh được thay thế trên các hệ thống bị xâm nhập bằng mật khẩu ghi lại tất cả mật khẩu. Với các khóa, khóa riêng vẫn nằm trên hệ thống cục bộ và không bao giờ được gửi, và do đó, nó không thể bị đánh cắp mà không thực sự xâm phạm máy khách.
Ngoài ra, các khóa ssh cung cấp sự tiện lợi khi được sử dụng với một cái gì đó như ssh-agent
- bạn có được hoạt động kết nối không gặp rắc rối mà không cần xác thực lại mỗi lần, trong khi vẫn duy trì mức độ bảo mật hợp lý.
Không có lợi thế đáng kể trong việc yêu cầu cả hai, vì ai đó có đủ quyền truy cập để đánh cắp khóa riêng cũng có thể dễ dàng đánh cắp mật khẩu của người dùng. Nếu bạn cần bảo mật nhiều hơn mức này, hãy xem xét xem xét một hệ thống xác thực hai yếu tố như RSA SecurID hoặc WiKID .