ansibleがCentOS7のsshdを変更するたびに、ランダムな将来のプレイが接続できない


8

これは今や十分な苛立たしい問題であり、私は最終的にコミュニティ全体に可能な解決策が何であるかを尋ねようと思いました。私だけがこの問題を経験しているように見えるのはさらにいらいらします。

基本的に、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サーバーで構成する必要があるものはありますか?これに対処するために必要なansibleに何かがありますか?最初の失敗時の再生ごとの複数のssh試行など

前もって感謝します!


1
既存の SSH接続がリセットされるのを見たことはありますか?通常、sshの再起動は既存の接続に影響を与えるとは考えられていないため、これはある種の手がかりになる可能性があります。
sourcejedi 2017年

使用している正確なansibleバージョンを指定してください(たとえば、systemdモジュールにバグある場合、人々はそれがどのバージョンであったか興味があるでしょう)。
sourcejedi 2017年

@sourcejedi ansible --version ansible 2.2.0.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w / o overridesまあ、それはバグである可能性があることを意味しますが、そうである場合、なぜ私がそれを経験している唯一の人?CentOS 7xをansibleで使用している人が他にいなければ、サービスの更新によって既存の接続が影響を受けることはないはずです。実際、私のCentOS 6xサーバーでは、すべて同じプレイブックで問題なく動作します。
粘度:

あなたがそれが再起動したと言うとき-システムログで、あなたが得るのはそれだけですか?またはsystemdはsshdが終了し、それに従って再起動されたことを報告しRestart=on-failureますか?もしそうなら、終了ステータスは何でしたか?また、sshdはエラーメッセージをログに記録しませんでしたか?
sourcejedi 2017年

これはAnsibleの問題ではなく、SSHまたは何らかのネットワークの問題です。SSHを再起動しても現在のSSH接続には影響しないため、ここで何か他のことができます。端末からSSHで定期的に接続して再起動sshdしてみましたが、接続はどうなりますか?またControlMaster、AnsibleでSSH を使用していますか?ansible.cfgで有効にできssh_args = -o ControlMaster=auto -o ControlPersist=60sます。
Strahinja Kustudic 2017

回答:


0

systemdモジュールを使用するのではなく、モジュールを試してくださいservice

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

1
興味深いことに、私はそれを試し、このページに戻って人々に知らせます。しかし、サービスモジュールは、実際にはsystemctlを介してリダイレクトする「サービス」バイナリを操作するだけではありませんか?さて、私はそれに打撃を与えます。
粘度:2017年

DopeGhoti、残念ながらあなたの提案はうまくいきませんでした。以前とまったく同じ問題が発生しますが、サービス間のモジュール依存やsystemdモジュールではないようです。他に誰か提案がありますか?
粘度:2017年

0

これは一般的な問題のようです。 2016年のAnsible ssh再試行用のパッチ

より良い解決策は、sshdが接続できるようになるまで待つことです。 このansibleコードソリューションの元のスレッド

[VM作成タスク...]

  -名前:キックスタートインストールが完了してVMが再起動するのを待ちますlocal_action:wait_for host = {{vm_hostname}} port = 22 delay = 30 timeout = 1200 state = started

  -名前:次にVMを構成します...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.