이것은 내가 가능한 해결책이 무엇인지 커뮤니티에 마침내 물어볼 것이라고 생각했기 때문에 지금 충분히 자극적이었습니다. 내가이 문제를 겪고있는 유일한 사람 인 것처럼 보입니다.
기본적으로 CentOS 7.x, sshd 구성 또는 sshd의 일부가 수정되고 다음 3 분 동안 데몬이 "임의 지점"에서 다시 시작 / 재로드되고 ssh 연결이 모두 재설정 된 다음 해당 서버는 ssh를 통해 몇 초 동안 연결할 수 없습니다.
이것은 때때로 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 서버에서 구성해야 할 것이 있습니까? 첫 번째 실패에서 플레이 당 여러 ssh 시도와 같이 이것을 처리하는 데 필요한 것이 있습니까?
미리 감사드립니다!
Restart=on-failure
되었습니까? 그렇다면 종료 상태는 무엇입니까? 그리고 sshd가 오류 메시지를 기록하지 않았습니까?
sshd
어떤 영향이 있습니까? ControlMaster
Ansible과 함께 SSH를 사용 하고 있습니까? ansible.cfg에서 활성화 할 수 있습니다 ssh_args = -o ControlMaster=auto -o ControlPersist=60s
.