Tắt máy từ xa một nhóm máy chủ linux (SNMP / Bonjour / socat?)


0

Tôi có một nhóm các máy chủ linux trên mạng con của mình mà tôi muốn có thể tắt máy từ xa. Tôi không muốn các máy không chính chủ phải phối hợp với chủ trước, tức là biết địa chỉ IP của nó, v.v. Vì vậy, một cái gì đó dựa trên các tin nhắn quảng bá hoặc phát đa hướng có vẻ là một cách tiếp cận rõ ràng.

Tôi đã thực hiện một giải pháp với socatnhưng tôi tự hỏi liệu có một giải pháp ít quảng cáo tốt hơn hay không, ví dụ như sử dụng một trong những dịch vụ nhận biết đa hướng được thiết lập như SNMP hoặc Bonjour?

Giải pháp của tôi là như sau. Trên tất cả các máy không chính chủ tôi chạy:

$ socat UDP4-RECVFROM:6666,broadcast,fork SYSTEM:'hostname; shutdown now'

Điều này nói socatđể nghe các tin nhắn quảng bá trên cổng 6666 và khi nhận được tin nhắn, nó sẽ trả lại tên máy chủ và tắt máy.

Bây giờ, bất kỳ máy nào trên cùng một mạng con đều có thể tắt tất cả các máy đang chạy lệnh này bằng lệnh sau (nó chờ đầu vào để nhập bất cứ thứ gì, vd bye):

$ socat STDOUT UDP4-DATAGRAM:255.255.255.255:6666,broadcast
bye

Điều này sẽ phát thông báo (trong trường hợp này bye), socatsau đó sẽ xuất ra các tên máy chủ được lặp lại bởi tất cả các máy đang nghe tin nhắn quảng bá trên cổng 6666.

Rõ ràng là không có bảo mật với phương pháp này - nếu bất kỳ máy nào trên cùng mạng con phát sóng bất cứ thứ gì tới cổng 6666 thì các hệ thống sẽ tắt. Người ta có thể thêm một lớp bổ sung đơn giản - thay vì chỉ chạy, hostname; shutdown nowngười ta có thể chạy một tập lệnh thực sự kiểm tra những gì được phát và chỉ tắt nếu ví dụ như một số ngẫu nhiên dài mà các bên quan tâm chỉ biết.


Tôi đã viết một tệp dịch vụ systemd tầm thường có thể được cài đặt để chạy lệnh đầu tiên ở socattrên trên máy khi khởi động. Xem gist.github.com/george-hawkins/21f98e4061fed8d4bb3d9183093c0726
George Hawkins

1
Chúng tôi rất vui vì bạn đã tự trả lời câu hỏi, tuy nhiên, để làm cho nó rõ ràng ở đây trên trang web này, bạn nên đăng TRẢ LỜI trong phần Trả lời bên dưới, và không chỉ đơn giản là đưa nó vào Câu hỏi của bạn. Vui lòng chỉnh sửa bài viết của bạn để đáp ứng các tiêu chí này. Có một sự chậm trễ bắt buộc giữa việc đăng câu trả lời cho câu hỏi của bạn và thực sự có thể đánh dấu nó là câu trả lời đúng, nhưng phương pháp này cho phép nó rõ ràng Câu hỏi là gì, và Câu trả lời cho câu hỏi đó là gì.
music2myear

Tôi đã hy vọng cho một câu trả lời tốt hơn, tức là tôi đã chỉ ra cách tiếp cận hiện tại của mình và hỏi liệu có cách nào tốt hơn dựa trên một giao thức đã được thiết lập như SNMP hoặc Bonjour không. Nhưng tôi có thể chia nó thành một câu trả lời (sau khi sự chậm trễ được thi hành kết thúc) và xem nó diễn ra như thế nào trong việc bỏ phiếu.
George Hawkins

Đồng ý. Sau đó, có một số rõ ràng thiếu trong bài viết của bạn. Nếu bạn muốn có một câu trả lời tốt hơn, điều đó cũng tốt. Có lẽ sử dụng một số định dạng và phá vỡ bài đăng của bạn với tiêu đề "Đây là những gì tôi đang làm bây giờ", "Đây là những gì nó không làm" và "Đây là những gì tôi muốn làm" hoặc tương tự như làm rõ yêu cầu của bạn sẽ làm cho nó dễ dàng hơn để nói những gì đang xảy ra.
music2myear

Câu trả lời:


0

chỉ tắt nếu ví dụ: một số ngẫu nhiên dài chỉ nên biết cho các bên quan tâm.

Chà, nếu bạn ổn với mức độ phối hợp đó, thì hãy có máy chủ chính SSH đến tất cả các máy chủ khác và chạy shutdownlệnh theo cách đó. Các máy chủ chỉ cần biết một số ngẫu nhiên dài, tức là khóa chung của chủ.

(Khóa riêng tương ứng không giới hạn ở một chủ duy nhất; bạn có thể sao chép ~/.ssh/id_*tệp bất cứ nơi nào bạn cần.)

Bonjour / Avahi hoàn toàn là một cơ chế khám phá và không hỗ trợ các lệnh phát sóng , nhưng bạn có thể sử dụng nó ở đây để liệt kê tất cả các máy trong mạng con (bằng dịch vụ "máy trạm" chung hoặc bởi một dịch vụ được xác định tùy chỉnh).


Cảm ơn câu trả lời của bạn - Tôi đã sử dụng ssh (với các khóa RSA) cho các tương tác thông thường giữa máy chủ và máy chủ / máy chủ không riêng. Tuy nhiên hãy xem nhận xét của tôi về câu trả lời của @ jehyyy. Tình huống tắt máy là một lệnh một-nhiều và socatcách tiếp cận tránh vòng lặp trên tất cả các nô lệ. Tôi nghĩ có lẽ SNMP, Bonjour hoặc một cái gì đó khác có thể đã cung cấp một cách tiếp cận ít quảng cáo hơn cho vấn đề này (tôi nhận được nhận xét của bạn về Bonjour). Nhưng có lẽ socatlà cách tiếp cận tốt nhất cho thiết lập của tôi và nếu tôi cần thêm tôi nên xem xét một số hệ thống quản lý tài nguyên đầy đủ.
George Hawkins

0

Vì bạn phải thực thi một lệnh trên "không chính chủ", tôi cho rằng có một số loại phối hợp giữa chủ và không chính chủ. Vì vậy, bạn có thể sử dụng ssh với xác thực cặp khóa ssh để thực thi lệnh từ xa như thế này:

ssh -i /path/to/pubkey @server 'shutdown -H now' 

Đây thực sự là cách tiếp cận tôi đã sử dụng trước khi socatđưa ra ở trên. Tuy nhiên, có một chủ và nhiều máy không chính chủ hoặc nô lệ - vì vậy người ta phải lặp lại tất cả các nô lệ với phương pháp này. Và tại bất kỳ thời điểm nào, một số tỷ lệ nô lệ sẽ ngoại tuyến - vì vậy người ta thấy nhiều thất bại của ssh (không phải là vấn đề lớn). Nhưng tôi nghĩ Bonjour hoặc SNMP có thể là một cách để đi - người ta có thể truy vấn để xem ai đang quảng cáo dịch vụ "tắt máy" và sau đó yêu cầu các máy phản hồi làm như vậy.
George Hawkins
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.