2013-02-01 24 views
10

Chúng tôi đang cố gắng cải thiện tự động hóa một số quy trình máy chủ; chúng tôi sử dụng Fabric. Tôi dự đoán phải quản lý nhiều máy chủ và điều đó có nghĩa là các kết nối SSH phải được thực hiện cho các máy chủ chưa được SSH vào trước đó. Nếu điều đó xảy ra, SSH luôn yêu cầu xác minh kết nối, điều này sẽ tự động ngắt.Làm cách nào để chuyển các tùy chọn SSH bằng Vải?

Tôi đã giải quyết vấn đề này, bằng cách sử dụng tùy chọn -o stricthostkeychecking=no trên lệnh SSH mà tôi sử dụng để đồng bộ hóa mã với rsync, nhưng tôi cũng sẽ cần sử dụng nó trên các cuộc gọi bằng Vải.

Có cách nào để chuyển các tùy chọn cụ thể cho ssh sang Fabric, đặc biệt là tùy chọn tôi đã đề cập ở trên không?

Trả lời

8

Câu trả lời ngắn gọn là:

  1. Đối với máy chủ mới, không có gì là cần thiết. env.reject_unknown_hosts mặc định là False
  2. Đối với máy chủ đã biết có khóa đã thay đổi, env.disable_known_hosts = True sẽ quyết định tiến hành kết nối với máy chủ đã thay đổi.

đọc Ye Olde tài liệu: http://docs.fabfile.org/en/1.5/usage/ssh.html#unknown-hosts

Thư viện paramiko có khả năng tải lên tập tin known_hosts của bạn, và sau đó sẽ so sánh bất kỳ máy chủ mà nó liên kết với bản đồ đó. Cài đặt có sẵn để xác định những gì sẽ xảy ra khi một máy chủ chưa biết (một máy chủ có tên hoặc IP không tìm thấy trong known_hosts) được xem:

  • chối: host key bị từ chối và kết nối không được thực hiện . Điều này dẫn đến một ngoại lệ Python, nó sẽ chấm dứt phiên Fabric của bạn với một thông báo rằng host không được biết.
  • Thêm: khóa máy chủ mới được thêm vào danh sách trong bộ nhớ của máy chủ đã biết, kết nối được thực hiện và mọi thứ tiếp tục bình thường. Lưu ý rằng điều này không sửa đổi tập tin known_hosts trên đĩa của bạn!
  • Hỏi: chưa được triển khai ở cấp Vải, đây là tùy chọn thư viện paramiko sẽ dẫn đến người dùng được nhắc về khóa không xác định và có chấp nhận hay không.

Cho dù từ chối hoặc thêm máy chủ, như trên, được điều khiển trong Fabric qua tùy chọn env.reject_unknown_hosts, mà là False theo mặc định vì lợi ích của tiện của. Chúng tôi cảm thấy đây là sự cân bằng hợp lệ giữa sự tiện lợi và an toàn; bất cứ ai cảm thấy khác có thể dễ dàng sửa đổi các fabfiles của họ ở cấp mô-đun để đặt env.reject_unknown_hosts = True.

http://docs.fabfile.org/en/1.5/usage/ssh.html#known-hosts-with-changed-keys

Máy chủ đã biết với các phím thay đổi

Điểm theo dõi chính/vân tay SSH là để tấn công man-in-the-middle có thể được phát hiện: nếu một trang đổi hướng tấn công lưu lượng truy cập SSH của bạn vào máy tính dưới sự kiểm soát của anh ấy và giả vờ là máy chủ đích ban đầu của bạn, các khóa máy chủ sẽ không khớp.Do đó, hành vi mặc định của SSH (và việc triển khai Python) là ngay lập tức hủy kết nối khi một máy chủ được ghi trước đó trong known_hosts đột nhiên bắt đầu gửi cho chúng tôi một khóa máy chủ khác.

Trong một số trường hợp cạnh như một số triển khai EC2, bạn có thể muốn bỏ qua vấn đề này. Lớp SSH của chúng tôi, tại thời điểm viết bài, không cung cấp cho chúng tôi quyền kiểm soát hành vi chính xác này, nhưng chúng tôi có thể bỏ qua bằng cách bỏ qua tải known_hosts - nếu danh sách máy chủ được so sánh với trống, thì không có vấn đề. Đặt env.disable_known_hosts thành True khi bạn muốn hành vi này; nó là Sai theo mặc định, để duy trì hoạt động SSH mặc định.

Cảnh báo Bật env.disable_known_hosts sẽ giúp bạn mở rộng đến các cuộc tấn công trung gian! Vui lòng sử dụng cẩn thận.

+0

Tuyệt vời, cảm ơn rất nhiều! –

Các vấn đề liên quan