Ini telah menjadi masalah yang cukup menjengkelkan sekarang saya pikir saya akhirnya akan bertanya pada masyarakat luas apa solusi yang mungkin. Lebih menjengkelkan lagi karena saya tampaknya menjadi satu-satunya yang mengalami masalah ini.
Pada dasarnya, kapan saja dalam CentOS 7.x, konfigurasi sshd, atau bagian mana pun dari sshd akan dimodifikasi, dan daemon akan dinyalakan kembali / dimuat kembali di beberapa "titik acak" dalam 3 menit berikutnya, koneksi ssh diatur ulang, dan kemudian server tersebut dihidupkan kembali. tidak dapat dijangkau selama beberapa detik melalui ssh.
Ini terutama masalah untuk memungkinkan dalam hal itu perlu melakukan perubahan ini sendiri untuk sshd kadang-kadang, dan juga memuat ulang (misalnya dalam membangun server CentOS 7x baru). Tapi kemudian di play berikutnya hanya secara acak tidak dapat terhubung ke ssh, dan itu meledak sisa playbook / drama untuk host yang gagal dihubungi. Ini terutama buruk untuk pola host besar, karena beberapa akan selesai secara acak, tetapi yang lain akan gagal pada berbagai tahap di sepanjang buku pedoman setelah sshd dimanipulasi. Perlu dicatat, bahwa hal semacam itu tidak terjadi pada CentOS 5x, 6x, atau bahkan pada Solaris.
Yang terbaik yang bisa saya lakukan untuk menghindari hal ini adalah dengan membuat 90 detik menunggu setelah ada perubahan pada sshd, dan bahkan ini tidak sepenuhnya aman. Itu membuat buku-buku pedoman itu membutuhkan waktu 20 menit untuk dijalankan jika itu dipanggil 7-8 kali.
Berikut ini beberapa fakta di lingkungan ini:
Semua pemasangan baru berasal dari ISO ISO resmi. Setiap server adalah tamu hyper-v 2012 Setiap server yang memiliki masalah ini adalah CentOS 7.x
Berikut adalah beberapa hasil aktual dari masalah dan beberapa solusi yang diretas:
Kesalahan:
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}]}
Contoh salah satu perubahan ke 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
Pawang berikut:
- name: sshd reload Linux 7x
systemd:
state: restarted
daemon_reload: yes
name: sshd
Akhirnya perbaikan ghetto saya untuk mencoba dan menjelaskan masalah ini:
- 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")
Harus ada solusi yang lebih baik daripada yang saya temukan, dan sulit untuk percaya bahwa semua orang menemukan ini dan juga bertahan dengan itu. Apakah ada sesuatu yang perlu saya konfigurasi di server CentOS 7.x untuk mencegah hal ini? Apakah ada sesuatu yang mungkin yang diperlukan untuk mengatasi hal ini, seperti beberapa upaya ssh per permainan pada kegagalan pertama?
Terima kasih sebelumnya!
Restart=on-failure
? Jika demikian, apa status keluarnya? Dan apakah sshd tidak mencatat pesan kesalahan apa pun?
sshd
dan apa yang terjadi dengan koneksi Anda? Anda juga menggunakan SSH ControlMaster
dengan Ansible? Anda dapat mengaktifkannya di ansible.cfg ssh_args = -o ControlMaster=auto -o ControlPersist=60s
.