Ansible: खुले बंदरगाहों की टेलनेट जांच के लिए अन्य विकल्प उपलब्ध है?


15

मैं नई हूं। यहाँ मेरा काम है ...

मेरे पास 400+ होस्ट हैं, और मुझे यह सत्यापित करने की आवश्यकता है कि क्या 5 अलग-अलग पोर्ट उनके अंत से हमारे वेब सर्वर पर खुले हैं।

व्यक्तिगत रूप से, मैं लॉग इन और रन कर सकता हूं:

telnet mywebserver.com 443
telnet mywebserver.com 80
telnet mywebserver.com 8443

..और इसी तरह..

Ansible में कौन से मॉड्यूल या प्लगइन का उपयोग किया जा सकता है, इसलिए मैं इसे स्वचालित कर सकता हूं, और क्या इसके परिणाम (चाहे खुले या बंद पोर्ट) मेरे Ansible सर्वर पर वापस रिपोर्ट करें?

जवाबों:


28

आप Ansible Wait_for मॉड्यूल का उपयोग कर सकते हैं जो एक विशिष्ट TCP पोर्ट की जांच करता है जो खुला है।

चूंकि इस मामले में, सभी पोर्ट पहले से ही खुले होने चाहिए, इसलिए हम न्यूनतम संख्या का उपयोग कर सकते हैं। रिट्रीट, नेटवर्क मुद्दों को कवर करने के लिए पर्याप्त:

- name: Check all port numbers are accessible from current host
  wait_for:
    host: mywebserver.com
    port: "{{ item }}"
    state: started         # Port should be open
    delay: 0               # No wait before first check (sec)
    timeout: 3             # Stop checking after timeout (sec)
  ignore_errors: yes
  with_items:
    - 443
    - 80
    - 80443

डिफ़ॉल्ट रूप से, Ansible प्रत्येक सेकंड में एक बार जांच करेगा ( sleepविशेषता का उपयोग करके Ansible 2.3 में कॉन्फ़िगर किया गया है), इसलिए यह प्रति पोर्ट 3 बार जांच करेगा।

इसे 400+ मेजबानों की अपनी इन्वेंट्री के खिलाफ प्लेबुक में चलाएं - अन्सिबल समानांतर में जांच करेगा कि सभी होस्ट mywebserver.comउन बंदरगाहों पर पहुंच सकते हैं ।

हम ignore_errors: yesयहां उपयोग करते हैं ताकि किसी भी त्रुटि को लाल रंग में चिह्नित किया जाए लेकिन निष्पादन बंद न करें।

खुले बंदरगाहों को okआउटपुट में आइटम के रूप में सूचित किया जाता है और बंद बंदरगाहों को रिपोर्ट किया जाता है failed(आपको इस आउटपुट को देखने के लिए -vvध्वज का उपयोग करना चाहिए ansible-playbook)।

फाइन-ट्यूनिंग आउटपुट

यदि आप सफलता और विफलता के मामलों के लिए अधिक विशिष्ट आउटपुट चाहते हैं, तो कोड को और अधिक जटिल होना चाहिए, दूसरा कार्य जोड़ना:

  • wait_forकार्य registerएक चर होना चाहिए
  • दूसरा कार्य debugसफलता / असफलता की स्थिति (उदाहरण के लिए जिनजा 2 सशर्त अभिव्यक्ति का उपयोग करके ) के आधार पर उत्पादन का उत्पादन करता है
  • फिर आपको इन दोनों कार्यों को एक सम्मिलित फ़ाइल (किसी भी with_itemsलूप के बिना ) में डालने की आवश्यकता है , और एक मुख्य प्लेबुक कार्य लिखें जो पोर्ट के अनुसार शामिल फ़ाइल को एक बार कॉल करने के लिए include... का उपयोग करता है with_items

महत्वपूर्ण रूप से उन्हें सेट करना होगा host: mywebserver.com
मोनिका सेलियो

@XiongChiamiov - host: xकी आवश्यकता नहीं है। मैंने अभी-अभी अंसिबल 2.3.1 के साथ पुन: परीक्षण किया है और सूची से संसाधित किए जा रहे वर्तमान सर्वर hostके wait_forकार्यों की विशेषता को कम करता है।
रिचवेल

वास्तव में, यही वजह है कि ओपी को इसे ओवरराइड करने की आवश्यकता है: वे अपने सभी सर्वर से किसी अन्य वेबसर्वर से कनेक्टिविटी का परीक्षण कर रहे हैं (प्रश्न को फिर से पढ़ें)।
मोनिका सेलियो

2
अच्छा बिंदु, hostsविशेषता के साथ उत्तर को अद्यतन किया है ।
रिचवेल

धन्यवाद! यह मेरे लिए काम करता है, और मुझे काम करने के लिए पर्याप्त देता है।
AWitaker

2

AFAIK इस उद्देश्य के लिए कोई अंतर्निहित मॉड्यूल नहीं है, लेकिन आप shell+ का उपयोग कर सकते हैं nc:

---
- hosts: all
  tasks:
    - shell: nc -z -w 1 -G 1 my.hostname.com {{ item }} || echo "Port {{ item }} is closed"
      with_items: [80,443,8443]

2
धन्यवाद, यह भी काम करता है, लेकिन मैंने पहले सुझाव के साथ जाने का विकल्प चुना क्योंकि इससे मुझे नाटक को और अधिक अनुकूलित करने की अनुमति मिलती है।
17

-G 1मैन पेजों में मुझे क्या नहीं मिल रहा है?
lonix

0

आप उसी के लिए wa_for मॉड्यूल का उपयोग कर सकते हैं

उदाहरण प्रलेखन से उद्धृत:

- name: Wait 300 seconds for port 8000 of any IP to close active connections, don't start checking for 10 seconds
  wait_for:
    host: 0.0.0.0
    port: 8000
    delay: 10
    state: drained

कृपया अपनी पोस्ट को ठीक से प्रारूपित करने का प्रयास करें, StackExchange नेटवर्क पर सभी साइट एक ही मार्कडाउन की अनुमति दें, प्रारूपण के लिए प्रलेखन यहाँ है
Tensibai

3
BTW मैं यह भी देखने में विफल रहता हूं कि यह उत्तर क्या जोड़ता है जो कि रिचवेल उत्तर में पहले से ही नहीं है
तेंसिबाई

0

हम इस तरह के कार्यों के लिए हमारे टूल dda-serverpec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) का उपयोग करते हैं। आप अपनी उम्मीद को परिभाषित कर सकते हैं

{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}

और इन अपेक्षाओं का परीक्षण या तो लोकलहोस्ट के खिलाफ करें या ssh द्वारा रिमोट करें। दूरस्थ परीक्षणों के लिए आपको एक लक्ष्य निर्धारित करना है:

{:existing [{:node-name "test-vm1"
:node-ip "35.157.19.218"}
{:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}}

आप द्वारा परीक्षण चला सकते हैं java -jar dda-serverspec.jar --targets targets.edn serverspec.edn

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.