जब भी ansible CentOS7 में sshd में परिवर्तन करता है तो एक यादृच्छिक भविष्य का खेल कनेक्ट नहीं हो सकता है


9

यह अब काफी परेशान कर देने वाली समस्या हो गई है कि मुझे लगा कि मैं आखिरकार समुदाय से पूछूंगा कि संभव समाधान क्या हो सकता है। यह और भी अधिक परेशान करने वाला है कि मैं इस मुद्दे का अनुभव करने वाला एकमात्र व्यक्ति हूं।

अनिवार्य रूप से, CentOS 7.x, sshd config, या sshd के किसी भी भाग में कभी भी संशोधन हो जाता है, और अगले 3 मिनट में डेमॉन फिर से शुरू हो जाता है / कुछ "यादृच्छिक बिंदु" पर पुनः लोड हो जाता है, ssh कनेक्शन सभी रीसेट कर देता है, और फिर वह सर्वर होता है ssh के माध्यम से कुछ सेकंड के लिए पहुंच योग्य नहीं है।

यह विशेष रूप से ansible के लिए एक समस्या है कि इसे कभी-कभी sshd करने के लिए इन परिवर्तनों को करने की आवश्यकता होती है, और इसे फिर से लोड करना भी होता है (उदाहरण के लिए नए CentOS 7x सर्वर बनाता है)। लेकिन फिर भविष्य में यह सिर्फ बेतरतीब ढंग से ssh से कनेक्ट नहीं हो सकता है, और यह उस होस्ट के लिए प्लेबुक / नाटकों के बाकी हिस्सों को उड़ा देता है जो संपर्क करने में विफल रहे। यह बड़े मेजबान पैटर्न के लिए विशेष रूप से खराब है, क्योंकि कुछ बेतरतीब ढंग से पूरा हो जाएगा, लेकिन अन्य sshd के हेरफेर के बाद प्लेबुक के साथ विभिन्न चरणों में विफल हो जाएंगे। यह ध्यान दें, कि CentOS 5x, 6x या सोलारिस पर भी इस प्रकार का कुछ भी नहीं होता है।

इससे बचने के लिए सबसे अच्छा मैं यह कर सकता हूं कि sshd में किसी भी बदलाव के बाद 90 सेकंड का इंतजार करें, और यहां तक ​​कि यह पूरी तरह से मूर्ख नहीं है। यह उन प्लेबुक को चलाने के लिए 20+ मिनट लेता है, हालांकि अगर इसे 7-8 बार लगाया जाए।

इस पर्यावरण पर कुछ तथ्य इस प्रकार हैं:

सभी नए इंस्टॉलेशन आधिकारिक आईएसओ डीवीडी के हैं। हर सर्वर एक हाइपर-वी 2012 अतिथि है प्रत्येक सर्वर जिसमें यह समस्या है वह CentOS 7.x है

यहाँ समस्याओं के कुछ वास्तविक आउटपुट और कुछ हैक किए गए समाधान हैं:

विफलता:

fatal: [voltron]: UNREACHABLE! => {"changed": false, "msg": "All items         completed", "results": [{"_ansible_item_result": true, "item": ["rsync", "iotop", "bind-utils", "sysstat.x86_64", "lsof"], "msg": "Failed to connect to the host via ssh: Shared connection to voltron closed.\r\n", "unreachable": true}]}

Sshd के परिवर्तनों में से एक का उदाहरण:

- name: Configure sshd to disallow root logins for security purposes on CentOS and Redhat 7x servers.
    lineinfile:
      backup: yes
      dest: /etc/ssh/sshd_config
      regexp: '^(#PermitRootLogin)'
      line: "PermitRootLogin no"
      state: present
    when: (ansible_distribution == "CentOS" or "RedHat") and (ansible_distribution_major_version == "7")
    notify: sshd reload Linux 7x

निम्नलिखित हैंडलर:

- name: sshd reload Linux 7x
   systemd:
     state: restarted
     daemon_reload: yes
     name: sshd

अंत में मेरे यहूदी बस्ती इस समस्या के लिए कोशिश करते हैं और खाते में आते हैं:

- name: Wait a bit on CentOS/Redhat 7x servers to ensure changes don't mess up ssh and screw up further plays.
    pause:
      seconds: 90
    when: (ansible_distribution == "CentOS" or "RedHat") and (ansible_distribution_major_version == "7")

मेरे पास जो कुछ भी आया है, उससे बेहतर समाधान हो गया है, और यह विश्वास करना कठिन है कि हर कोई इसका सामना करता है और इसके बारे में भी सोचता है। क्या ऐसा कुछ है जिसे रोकने के लिए मुझे CentOS 7.x सर्वर में कॉन्फ़िगर करना होगा? क्या इस से निपटने के लिए आवश्यक कुछ है, जैसे कि पहली असफलता पर प्रति नाटक कई ssh प्रयास?

अग्रिम में धन्यवाद!


1
क्या आप वाकई इसे मौजूदा ssh कनेक्शन रीसेट कर चुके हैं ? आम तौर पर, ssh को पुनरारंभ करना मौजूदा कनेक्शन को प्रभावित करने वाला नहीं है, इसलिए यह किसी प्रकार का सुराग हो सकता है।
sourcejedi

सटीक ansible संस्करण उपयोग कर रहे निर्दिष्ट करें (उदाहरण के लिए, अगर वहाँ है systemd मॉड्यूल में एक बग, लोगों को कौन-सा संस्करण यह था दिलचस्पी होगी)।
sourcejedi

@sourcejedi ansible --version ansible 2.2.0.0 config file = /etc/ansible/ansible.cfg कॉन्फ़िगर मॉड्यूल खोज पथ = डिफ़ॉल्ट w / o ओवरराइड खैर, मेरा मतलब है कि यह "बग" हो सकता है, लेकिन यदि हां, तो मैं क्यों हूं केवल एक ही इसका अनुभव कर रहा है? जब तक कोई और नहीं है, तो Cents 7x का उपयोग करने योग्य के साथ .... आप सही हैं कि फिर भी एक सेवा ताज़ा मौजूदा कनेक्शन को प्रभावित नहीं करना चाहिए। वास्तव में, मेरे CentOS 6x सर्वर पर, समान प्लेबुक पर सब कुछ त्रुटिपूर्ण रूप से काम करता है।
चिपचिपाहट

जब आप कहते हैं कि इसे पुनः आरंभ किया गया है - सिस्टम लॉग में, क्या यह सब आपको मिलता है? या systemd रिपोर्ट करता है कि sshd बाहर निकल गया, और उसके अनुसार पुनः आरंभ किया गया Restart=on-failure? यदि हां, तो बाहर निकलने की स्थिति क्या थी? और sshd ने कोई त्रुटि संदेश लॉग नहीं किया?
sourcejedi

यह एक Ansible समस्या नहीं है, लेकिन SSH या कुछ नेटवर्क समस्या है। SSH को पुनरारंभ करने से वर्तमान SSH कनेक्शन प्रभावित नहीं होते हैं, इसलिए यहां कुछ और है। क्या आपने टर्मिनल से SSH को नियमित रूप से जोड़ने की कोशिश की है, पुनः आरंभ करें sshdऔर आपके कनेक्शन के साथ क्या होता है? क्या आप SSH का उपयोग ControlMasterऐन्सिबल के साथ कर रहे हैं ? आप इसे ansible.cfg में सक्षम कर सकते हैं ssh_args = -o ControlMaster=auto -o ControlPersist=60s
स्ट्रिन्हिन्जा कस्टूडिक

जवाबों:


0

systemdमॉड्यूल का उपयोग करने के बजाय , मॉड्यूल का प्रयास करें service:

- name: Restart secure shell daemon post configuration
  service: 
    name: sshd
    state: restarted

1
दिलचस्प है, मैं कोशिश करूंगा कि इस पेज पर वापस आऊं और लोगों को बताऊं लेकिन क्या सेवा मॉड्यूल सिर्फ "सेवा" बाइनरी में हेरफेर नहीं करता है जो वास्तव में सिस्टेक्ट्ल के माध्यम से पुनर्निर्देशित करता है? खैर, मैं इसे एक शॉट देता हूँ।
चिपचिपापन

DopeGhoti, दुख की बात है कि आपका सुझाव काम नहीं आया। मुझे पहले जैसा ही मुद्दा मिलता है, और यह मॉड्यूल सेवा, या सिस्टमड मॉड्यूल के बीच निर्भर प्रतीत नहीं होता है। किसी और के पास कोई सुझाव है?
चिपचिपाहट

0

यह एक आम समस्या लगती है। 2016 से Ansible ssh रिट्रीट के लिए पैच

एक बेहतर समाधान के लिए sshd इंतजार करने के लिए कनेक्ट करने के लिए तैयार हो सकता है। इस थ्रेड कोड के साथ मूल धागा :

[VM निर्माण कार्य ...]

  - नाम: किकस्टार्ट के पूरा होने तक प्रतीक्षा करें और VM को लोकल रिबूट करने के लिए इंस्टॉल करें: Wait_for host = {{vm_hostname}} port = 22 delay = 30 timeout = 1200 state = start

  - नाम: अब VM को कॉन्फ़िगर करें ...

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