Ansible이 CentOS7에서 sshd를 변경할 때마다 향후 임의의 게임이 연결되지 않습니다.

Ansible이 CentOS7에서 sshd를 변경할 때마다 향후 임의의 게임이 연결되지 않습니다.

이것은 이제 가능한 해결책이 무엇인지 전체 커뮤니티에 물어볼 만큼 짜증나는 문제입니다. 더욱 짜증나는 것은 이 문제를 겪고 있는 사람이 나뿐인 것 같다는 것이다.

기본적으로 CentOS 7.x에서는 언제든지 sshd 구성 또는 sshd의 일부가 수정되고 데몬이 다음 3분 이내에 "임의의 지점"에서 다시 시작/다시 로드되고 ssh 연결이 모두 재설정된 다음 ssh를 통해 서버에 연결할 수 없습니다. 몇 초 동안.

이는 때때로 sshd를 변경하고 자체적으로 다시 로드해야 하기 때문에(예: 새로운 CentOS 7x 서버 릴리스에서) ansible의 경우 특히 문제가 됩니다. 그러나 향후 게임에서는 무작위로 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가 실패할 때마다 여러 SSH를 시도하는 것과 같이 이를 처리하기 위해 필요한 것이 있습니까?

미리 감사드립니다!

답변1

이것은 일반적인 문제인 것 같습니다. 2016년 이후 Ansible SSH 재시도 패치

더 나은 해결책은 sshd가 연결될 준비가 될 때까지 기다리는 것입니다. 원래 라인다음 Ansible 코드 솔루션을 사용하세요.

[VM 생성 작업...]

  - name: Kickstart 설치가 완료되고 VM이 다시 시작될 때까지 기다립니다. local_action: wait_for 호스트={{ vm_hostname }} port=22 지연=30 timeout=1200 state=started

  - 이름: 이제 가상 머신을 구성합니다...

답변2

이 모듈을 사용하는 대신 systemd다음을 시도해 보세요 service.

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

관련 정보