
これは、考えられる解決策が何であるか、コミュニティ全体に尋ねるのと同じくらい迷惑な問題です。さらに迷惑なのは、この問題を経験している人が私だけのようだということだ。
デフォルトでは、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の変更の1つの例:
- 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