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!
Restart=on-failure
mu? Öyleyse çıkış durumu neydi? Ve sshd herhangi bir hata mesajı kaydetmedi mi?
sshd
ve bağlantınıza ne olur? Ayrıca ControlMaster
Ansible ile SSH mı kullanıyorsunuz ? Ansible.cfg dosyasında etkinleştirebilirsiniz ssh_args = -o ControlMaster=auto -o ControlPersist=60s
.