Sempre que ansible faz alterações no sshd no CentOS7, uma reprodução aleatória no futuro não pode se conectar

8

Este problema tem sido bastante irritante agora que pensei em finalmente perguntar à comunidade em geral que solução possível poderia ser. É ainda mais irritante que eu pareça ser o único que está enfrentando esse problema.

Essencialmente, a qualquer momento no CentOS 7.x, sshd configs, ou qualquer parte do sshd é modificada, e o daemon é reiniciado / recarregado em algum "ponto aleatório" nos próximos 3 minutos, todas as conexões ssh são reiniciadas e então esse servidor está inacessível por alguns segundos via ssh.

Isto é especialmente um problema para o ansible, pois ele precisa fazer essas mudanças no sshd algumas vezes, e também recarregá-lo (por exemplo, em novas versões do servidor CentOS 7x). Mas então, no futuro, ele apenas aleatoriamente não pode se conectar ao ssh, e ele explode o resto do playbook / jogadas para aquele host que falhou em ser contatado. Isso é especialmente ruim para um grande padrão de host, já que alguns irão completar aleatoriamente, mas os outros falharão em vários estágios ao longo do playbook depois que o sshd for manipulado. É de notar que nada disso ocorre no CentOS 5x, 6x ou mesmo no Solaris.

O melhor que posso fazer para evitar isso é criar uma espera de 90 segundos após qualquer alteração no sshd, e mesmo isso não é totalmente infalível. Isso faz com que essas cartilhas demorem mais de 20 minutos para serem executadas, embora sejam invocadas de 7 a 8 vezes.

Aqui estão alguns fatos sobre esse ambiente:

Todas as novas instalações são de DVDs oficiais da ISO. Cada servidor é um convidado do hyper-v 2012 Todo servidor que tem esse problema é o CentOS 7.x

Aqui estão alguns resultados reais dos problemas e algumas soluções banais:

A falha:

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}]}

Exemplo de uma das mudanças no 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

O seguinte manipulador:

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

Finalmente, meu ghetto resolveu tentar explicar esse problema:

- 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")

Tem de haver uma solução melhor do que a que eu criei, e é difícil acreditar que todos os outros encontrem isso e também aceitem isso. Existe algo que eu preciso configurar nos servidores do CentOS 7.x para evitar isso? Existe algo em ansible que é necessário para lidar com isso, como várias tentativas ssh por jogo na primeira falha?

Obrigado antecipadamente!

    
por Viscosity 01.06.2017 / 20:08

2 respostas

0

Em vez de usar o módulo systemd , tente o módulo service :

- name: Restart secure shell daemon post configuration
  service: 
    name: sshd
    state: restarted
    
por 01.06.2017 / 20:28
0

Este parece ser um problema comum. Patch para novas tentativas de ssh do Ansible a partir de 2016

Uma solução melhor pode ser esperar que o sshd esteja pronto para se conectar. Tópico original com essa solução de código ansiosa:

[tarefas de criação de VM ...]

- name: Aguarde a conclusão da instalação do Kickstart e a reinicialização da VM local_action: wait_for host = {{vm_hostname}} porta = 22 atraso = 30 tempo limite = 1200 estado = iniciado

- name: Agora configure a VM ...

    
por 27.07.2017 / 12:05