Ansible CentOS7'de sshd'de her değişiklik yaptığında, gelecekteki rastgele bir oyun bağlanamaz


9

Nihayet topluma büyük olasılıkla olası bir çözümün ne olacağını soracağımı düşündüğüm için bu yeterince rahatsız edici bir sorun oldu. Bu sorunu yaşayan tek kişi olduğumu daha da rahatsız ediyor.

Esasen, CentOS 7.x, sshd yapılandırmalarında veya sshd'nin herhangi bir bölümünde değişiklik olduğunda ve arka plan programı önümüzdeki 3 dakika içinde "rastgele bir noktada" yeniden başlatılır / yeniden yüklenir, ssh bağlantılarının tümü sıfırlanır ve daha sonra bu sunucu ssh ile birkaç saniye boyunca ulaşılamaz.

Bu, özellikle sshd için bu değişiklikleri kendisinin yapması ve aynı zamanda yeniden yüklemesi gerektiğinden (örneğin yeni CentOS 7x sunucu yapılarında) ansible için bir sorundur. Ama sonra gelecekte oyun sadece rastgele ssh bağlanamıyor ve temas kurulamadı o ana bilgisayar için playbook / oyun geri kalanı havaya uçurur. Bu, büyük bir ana bilgisayar deseni için özellikle kötüdür, çünkü birkaç tanesi rastgele tamamlanır, ancak diğerleri sshd manipüle edildikten sonra oyun kitabı boyunca çeşitli aşamalarda başarısız olur. CentOS 5x, 6x ve hatta Solaris'te böyle bir şey meydana gelmediğine dikkat edilmelidir.

Bunu önlemek için yapabileceğim en iyi şey, sshd'de herhangi bir değişiklikten sonra 90 saniyelik bir bekleme yaratmaktır ve bu bile tamamen kusursuz değildir. Bu playbook'ların 7-8 kez çağrılırsa çalıştırılmaları 20+ dakika sürer.

İşte bu ortamla ilgili bazı gerçekler:

Tüm yeni yüklemeler resmi ISO DVD'lerinden alınmıştır. Her sunucu hyper-v 2012 misafiridir Bu sorunu yaşayan her sunucu CentOS 7.x'tir.

Sorunların bazı gerçek çıktıları ve bazı hackneyed çözümleri:

Başarısızlık:

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'deki değişikliklerden birine örnek:

- 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

Aşağıdaki işleyici:

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

Sonunda benim getto bu sorunu denemek ve hesap için düzeltme:

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

Geldiğimden daha iyi bir çözüm olmalı ve herkesin bununla karşılaştığına ve aynı zamanda buna katlandığına inanmak zor. Bunu önlemek için CentOS 7.x sunucularında yapılandırmam gereken bir şey var mı? Bu konuda başa çıkmak için gerekli olan ve ilk başarısızlıkta oyun başına birden fazla ssh denemesi gibi bir şey var mı?

Şimdiden teşekkürler!


1
Mevcut ssh bağlantılarını sıfırladığını gördüğünüzden emin misiniz ? Normalde, ssh'nin yeniden başlatılmasının mevcut bağlantıları etkilemesi gerekmez, bu nedenle bu bir tür ipucu olabilir.
sourcejedi

Kullandığınız tam yanıtlayıcı 'versiyonunu belirtin (orada eğer örneğin olduğunu systemd modülünde bir hata, insanlar içinde ne versiyonu ilgi olacaktır).
sourcejedi

@sourcejedi ansible --version ansible 2.2.0.0 yapılandırma dosyası = /etc/ansible/ansible.cfg yapılandırılmış modül arama yolu = Varsayılan geçersiz kılmaları geçersiz kılınmış bunu yaşayan tek kişi? Aksi takdirde CentOS 7x kullanarak başka kimse olmadığı sürece .... Haklısın ancak bir servis yenileme mevcut bağlantıları etkilememelidir. Gerçekten de, CentOS 6x sunucularımda, her şey aynı oyun kitabında kusursuz bir şekilde çalışıyor.
Viskozite

Yeniden başlatıldığını söylediğinizde - sistem günlüğünde, elde ettiğiniz tek şey bu mu? Yoksa systemd, sshd'nin çıktığını ve göre yeniden başlatıldığını bildiriyor Restart=on-failuremu? Öyleyse çıkış durumu neydi? Ve sshd herhangi bir hata mesajı kaydetmedi mi?
sourcejedi

Bu bir Ansible sorunu değil, SSH veya bazı ağ sorunları. SSH'nin yeniden başlatılması mevcut SSH bağlantılarını etkilemez, bu nedenle burada başka bir şey var. Terminalden düzenli olarak SSH üzerinden bağlanmayı denediniz, yeniden başlatın sshdve bağlantınıza ne olur? Ayrıca ControlMasterAnsible ile SSH mı kullanıyorsunuz ? Ansible.cfg dosyasında etkinleştirebilirsiniz ssh_args = -o ControlMaster=auto -o ControlPersist=60s.
Strahinja Kustudic

Yanıtlar:


0

systemdModülü kullanmak yerine, modülü deneyin service:

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

1
İlginç, bunu deneyeceğim ve insanların haberdar olması için bu sayfaya geri döneceğim. Ancak hizmet modülü sadece systemctl üzerinden yeniden yönlendiren "hizmet" ikili dosyasını işlemez mi? Ben bir şans vereceğim.
Viskozite

DopeGhoti, ne yazık ki öneriniz işe yaramadı. Daha önce olduğu gibi aynı sorunu alıyorum ve hizmet veya systemd modülleri arasında modüle bağımlı görünmüyor. Başka tavsiyesi olan?
Viskozite

0

Bu yaygın bir Sorun gibi görünüyor. Ansible ssh düzeltme eki 2016'dan yeniden denendi

Daha iyi bir çözüm, sshd'nin bağlanmaya hazır olmasını beklemek olabilir. Bu ansible kod çözümü ile orijinal konu :

[VM oluşturma görevleri ...]

  - name: Kickstart kurulumunun tamamlanmasını ve VM'nin local_action'u yeniden başlatmasını bekleyin: wait_for host = {{vm_hostname}} port = 22 gecikme = 30 zaman aşımı = 1200 durum = başladı

  - name: Şimdi VM'yi yapılandırın ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.