यह अब काफी परेशान कर देने वाली समस्या हो गई है कि मुझे लगा कि मैं आखिरकार समुदाय से पूछूंगा कि संभव समाधान क्या हो सकता है। यह और भी अधिक परेशान करने वाला है कि मैं इस मुद्दे का अनुभव करने वाला एकमात्र व्यक्ति हूं।
अनिवार्य रूप से, 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 प्रयास?
अग्रिम में धन्यवाद!
Restart=on-failure
? यदि हां, तो बाहर निकलने की स्थिति क्या थी? और sshd ने कोई त्रुटि संदेश लॉग नहीं किया?
sshd
और आपके कनेक्शन के साथ क्या होता है? क्या आप SSH का उपयोग ControlMaster
ऐन्सिबल के साथ कर रहे हैं ? आप इसे ansible.cfg में सक्षम कर सकते हैं ssh_args = -o ControlMaster=auto -o ControlPersist=60s
।