每當 ansible 在 CentOS7 中對 sshd 進行更改時,未來的隨機播放將無法連接
這已經是一個夠煩人的問題了,我想我最終會問整個社區可能的解決方案是什麼。更令人惱火的是,我似乎是唯一遇到此問題的人。
本質上,在 CentOS 7.x 中的任何時候,sshd 配置或 sshd 的任何部分都被修改,並且守護程序在接下來的 3 分鐘內的某個“隨機點”重新啟動/重新載入,ssh 連接全部重置,然後該伺服器是通過 ssh 在幾秒鐘內無法訪問。
這對於 ansible 來說尤其是一個問題,因為它有時需要自己對 sshd 進行這些更改,並且還要重新載入它(例如在新的 CentOS 7x 伺服器建構中)。但是在以後的播放中,它只是隨機無法連接到 ssh,並且它會炸毀無法聯繫到的主機的其餘劇本/播放。這對於大型主機模式尤其不利,因為少數會隨機完成,但其他會在 sshd 被操縱後在劇本的各個階段失敗。值得注意的是,在 CentOS 5x、6x 甚至 Solaris 上都不會發生這種情況。
為了避免這種情況,我能做的最好的事情是在對 sshd 進行任何更改後創建 90 秒的等待時間,即使這也不是萬無一失的。如果呼叫 7-8 次,它會使這些劇本需要 20 多分鐘才能執行。
以下是有關此環境的一些事實:
所有新安裝都來自官方 ISO DVD。每台伺服器都是 hyper-v 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 伺服器中配置什麼來防止這種情況發生嗎?ansible 中是否需要處理此問題,例如在第一次失敗時每次播放多次 ssh 嘗試?
提前致謝!
這似乎是一個常見的問題。 從 2016 年起重試 Ansible ssh 的更新檔
更好的解決方案可能是等待 sshd 準備好連接。 具有此 ansible 程式碼解決方案的原始執行緒:
$$ VM creation tasks… $$ - 名稱:等待 Kickstart 安裝完成並重新啟動 VM local_action:wait_for host={{ vm_hostname }} port=22 delay=30 timeout=1200 state=started
- 名稱:現在配置虛擬機…
與其使用模組,不如
systemd
嘗試service
模組:- name: Restart secure shell daemon post configuration service: name: sshd state: restarted