Trong khi chúng tôi đã viết hướng dẫn này với Linux, điều này cũng có thể áp dụng cho OpenSSH trong Mac OS X và Windows 7 thông qua Cygwin.
Tại sao tính năng này an toàn
Chúng tôi đã đề cập nhiều lần về cách SSH là cách tuyệt vời để kết nối an toàn và truyền dữ liệu từ điểm này sang điểm khác. Chúng ta hãy xem xét một cách ngắn gọn về cách mọi thứ hoạt động để bạn có được một ý tưởng tốt hơn về lý do tại sao mọi thứ có thể trở nên kỳ quặc đôi khi.
Nếu chúng tôi nghĩ rằng quá trình kết nối của chúng tôi là thư, thì việc sử dụng FTP và Telnet và các dịch vụ tương tự không giống như sử dụng phong bì gửi thư tiêu chuẩn. Nó giống như sử dụng bưu thiếp. Nếu ai đó xảy ra để bước vào giữa, họ có thể xem tất cả các thông tin, bao gồm cả địa chỉ của cả hai phóng viên và tên người dùng và mật khẩu được gửi đi. Sau đó, họ có thể thay đổi tin nhắn, giữ thông tin giống nhau, và mạo danh một phóng viên hoặc bên kia. Điều này được gọi là một cuộc tấn công "trung gian", và nó không chỉ làm tổn hại đến tài khoản của bạn, mà nó còn đặt câu hỏi cho mỗi và mọi thông điệp được gửi và nhận được. Bạn không thể chắc chắn nếu bạn đang nói chuyện với người gửi hay không, và ngay cả khi bạn đang có, bạn không thể chắc chắn không ai nhìn vào tất cả mọi thứ từ giữa.
Bây giờ, hãy xem mã hóa SSL, loại làm cho HTTP an toàn hơn. Ở đây, chúng tôi có một bưu điện xử lý thư từ, người kiểm tra xem người nhận của bạn có phải là người được họ khiếu nại hay không và có luật bảo vệ thư của bạn không bị xem xét. Tổng quan an toàn hơn và cơ quan trung ương - Verisign là một, cho ví dụ HTTPS của chúng tôi - đảm bảo rằng người bạn đang gửi thư để kiểm tra. Họ làm điều này bằng cách không cho phép bưu thiếp (thông tin đăng nhập không được mã hóa); thay vào đó họ ủy thác phong bì thật.
Với lời giải thích miễn là nó, chúng tôi nghĩ rằng chúng tôi sẽ cắt nó ở đó. Nếu bạn có một số thông tin chi tiết hơn, cảm thấy tự do để trò chuyện trong các ý kiến, tất nhiên. Bây giờ, hãy xem xét tính năng có liên quan nhất của SSH, xác thực máy chủ.
Khóa máy chủ
Xác thực máy chủ về cơ bản là phần mà người mà bạn tin cậy mang phong bì (niêm phong bằng phép toán) và xác nhận địa chỉ của người nhận. Đó là một mô tả khá chi tiết về địa chỉ và dựa trên một số phép toán phức tạp mà chúng tôi sẽ bỏ qua ngay. Tuy nhiên, có một vài điều quan trọng cần lấy đi từ điều này:
- Vì không có thẩm quyền trung tâm, bảo mật thực sự nằm trong khóa máy chủ, khóa công khai và khóa riêng. (Hai khóa sau được định cấu hình khi bạn được cấp quyền truy cập vào hệ thống.)
- Thông thường, khi bạn kết nối với một máy tính khác thông qua SSH, khóa máy chủ được lưu trữ. Điều này làm cho các hành động trong tương lai nhanh hơn (hoặc ít tiết).
- Nếu khóa máy chủ thay đổi, bạn sẽ rất có thể được cảnh báo và bạn nên cảnh giác!
Vì khóa máy chủ được sử dụng trước khi xác thực để thiết lập danh tính của máy chủ SSH, bạn nên chắc chắn kiểm tra khóa trước khi kết nối. Bạn sẽ thấy một hộp thoại xác nhận như dưới đây.
Kiểm tra Khóa Máy chủ của Hệ thống của bạn
Có 4 loại thuật toán mã hóa được sử dụng để tạo khóa, nhưng mặc định cho OpenSSH vào đầu năm nay là ECDSA (với một số lý do chính đáng). Chúng ta sẽ tập trung vào ngày hôm nay.Đây là lệnh bạn có thể chạy trên máy chủ SSH mà bạn có quyền truy cập vào:
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key.pub -l
Đầu ra của bạn sẽ trả về một cái gì đó như thế này:
256 ca:62:ea:7c:e4:9e:2e:a6:94:20:11:db:9c:78:c3:4c /etc/ssh/ssh_host_ecdsa_key.pub
Số đầu tiên là độ dài bit của khóa, sau đó là chính khóa và cuối cùng bạn có tệp được lưu trữ. So sánh phần giữa đó với phần bạn thấy khi được nhắc đăng nhập từ xa. Nó phải phù hợp và bạn đã sẵn sàng. Nếu không, thì điều gì đó khác có thể xảy ra.
Bạn có thể xem tất cả các máy chủ mà bạn đã kết nối thông qua SSH bằng cách xem tập tin known_hosts của bạn. Nó thường được đặt tại:
~/.ssh/known_hosts
Bạn có thể mở nó trong bất kỳ trình soạn thảo văn bản nào. Nếu bạn nhìn, hãy cố gắng chú ý đến cách các khóa được lưu trữ. Chúng được lưu trữ với tên của máy chủ (hoặc địa chỉ web) và địa chỉ IP của máy tính đó.
Thay đổi khóa và sự cố máy chủ
Có một vài lý do tại sao khóa máy chủ thay đổi hoặc chúng không khớp với những gì được ghi trong tệp known_host của bạn.
- Hệ thống đã được cài đặt lại / cấu hình lại.
- Các khóa máy chủ đã được thay đổi theo cách thủ công do các giao thức bảo mật.
- Máy chủ OpenSSH được cập nhật và đang sử dụng các tiêu chuẩn khác nhau do các vấn đề bảo mật.
- Thuê IP hoặc DNS đã thay đổi. Điều này thường có nghĩa là bạn đang cố truy cập một máy tính khác.
- Hệ thống đã bị xâm nhập theo một cách nào đó để khóa máy chủ thay đổi.
Rất có thể, vấn đề là một trong ba vấn đề đầu tiên và bạn có thể bỏ qua thay đổi. Nếu thuê IP / DNS thay đổi, thì có thể có sự cố với máy chủ và bạn có thể được định tuyến đến một máy khác. Nếu bạn không chắc chắn lý do thay đổi là gì thì có lẽ bạn nên cho rằng đó là lý do cuối cùng trong danh sách.
Cách OpenSSH xử lý các máy chủ không xác định
Tùy thuộc vào cấu hình của bạn, kết nối SSH với máy chủ không xác định (có khóa không có trong tệp known_hosts của bạn) có thể theo ba cách.
- StrictHostKeyChecking được đặt thành không; OpenSSH sẽ tự động kết nối với bất kỳ máy chủ SSH nào bất kể trạng thái khóa máy chủ. Điều này không an toàn và không được đề xuất, trừ khi bạn đang thêm một loạt máy chủ sau khi cài đặt lại hệ điều hành của mình, sau đó bạn sẽ thay đổi lại.
- StrictHostKeyChecking được đặt để hỏi; OpenSSH sẽ hiển thị cho bạn các khóa máy chủ mới và yêu cầu xác nhận trước khi thêm chúng. Nó sẽ ngăn các kết nối chuyển sang các khóa máy chủ thay đổi. Đây là mặc định.
- StrictHostKeyChecking được đặt thành có; Ngược lại với “không”, điều này sẽ ngăn cản bạn kết nối với bất kỳ máy chủ nào chưa có trong tệp known_host của bạn.
Bạn có thể thay đổi biến này một cách dễ dàng trên dòng lệnh bằng cách sử dụng mô hình sau:
ssh -o 'StrictHostKeyChecking [option]' user@host
Thay thế [tùy chọn] bằng "không", "yêu cầu" hoặc "có". Hãy lưu ý rằng có một dấu nháy đơn liên quan đến biến này và cài đặt của nó. Ngoài ra, hãy thay thế người dùng @ host bằng tên người dùng và tên máy chủ lưu trữ của máy chủ mà bạn đang kết nối. Ví dụ:
ssh -o 'StrictHostKeyChecking ask' [email protected]
Máy chủ bị chặn do các phím đã thay đổi
Nếu bạn có một máy chủ mà bạn đang cố truy cập có khóa đã được thay đổi, cấu hình OpenSSH mặc định sẽ ngăn bạn truy cập vào nó. Bạn có thể thay đổi giá trị StrictHostKeyChecking cho máy chủ lưu trữ đó, nhưng điều đó sẽ không hoàn toàn, triệt để, an toàn tuyệt đối, phải không? Thay vào đó, chúng ta chỉ có thể loại bỏ giá trị vi phạm khỏi tệp known_hosts của chúng ta.
Bây giờ chúng tôi nhận được một lời nhắc tốt đẹp thay vào đó, mà chúng tôi chỉ có thể phản ứng với "có".
Tạo khóa máy chủ mới
Đối với hồ sơ, thực sự không có quá nhiều lý do để bạn thay đổi chìa khóa máy chủ của mình, nhưng nếu bạn tìm thấy nhu cầu, bạn có thể thực hiện dễ dàng.
Đầu tiên, thay đổi thư mục hệ thống thích hợp:
cd /etc/ssh/
Đây thường là nơi các khóa máy chủ lưu trữ toàn cục, mặc dù một số bản phân phối đã đặt chúng ở nơi khác. Khi nghi ngờ kiểm tra tài liệu của bạn!
Tiếp theo, chúng tôi sẽ xóa tất cả các khóa cũ.
sudo rm /etc/ssh/ssh_host_*
Ngoài ra, bạn có thể muốn chuyển chúng vào một thư mục sao lưu an toàn. Chỉ là một ý nghĩ!
Sau đó, chúng tôi có thể yêu cầu máy chủ OpenSSH tự cấu hình lại:
sudo dpkg-reconfigure openssh-server
Bạn sẽ thấy lời nhắc khi máy tính của bạn tạo khóa mới. Ta-da!
Bây giờ bạn đã biết cách SSH hoạt động tốt hơn một chút, bạn sẽ có thể thoát ra khỏi những điểm khó khăn. Cảnh báo / lỗi "Nhận dạng máy chủ từ xa đã thay đổi" là điều khiến nhiều người dùng tắt, ngay cả những người quen thuộc với dòng lệnh.
Đối với điểm thưởng, bạn có thể kiểm tra Làm thế nào để sao chép từ xa tập tin qua SSH mà không cần nhập mật khẩu của bạn. Ở đó, bạn sẽ tìm hiểu thêm một chút về các loại thuật toán mã hóa khác và cách sử dụng các tệp quan trọng để tăng cường bảo mật.