私は、すべて CentOS 7.3 を実行している 20 台のホストのクラスターで作業しています。
次のことを確認するための自動テストを作成しようとしています:
- 期待通りのネットワーク接続が確立されました
- SSHシングルサインオン(SSO)ソリューションが機能しています
期待されるネットワーク接続は非常にシンプルです。単一のフラットなサブネットです。すべてのホストが他のすべてのホストにアクセスできる必要があります。
当社の SSH SSO ソリューション (FreeIPA) は、ユーザーを認証するために Kerberos を使用し、ホストを認証するために SSH 公開キーを使用します。ユーザーの Kerberos チケット許可チケット (TGT) は、ユーザーが SSH を使用して接続するすべてのホストに転送するように設定されています。
テストは非常に簡単です:
すべてのホストでSSHを使用して実行してみるホスト名他のすべてのホスト上のリモート コマンドとして。
これを行うには、次のユーティリティを使用します。pdf。
簡単に言うと、このユーティリティはSSHを使用してホストのセットでリモートコマンドを実行します。各ホストに対してスレッドを生成し、各スレッドでコマンドを実行することで並列に実行します。ssh 。
このコマンドの使用方法は次のとおりです。 20 個のクラスター ホストの 1 つではないマシンで、次のコマンドを実行します。
pdsh -g all 'pdsh -g all "hostname"'
-g すべてリモート コマンドをすべてのクラスター ホストで実行することを指定します。前述のとおり、クラスター ホストは 20 台あります。
すべてのリモート ホストで実行されるコマンドは次のとおりです。
pdsh -g all "hostname"
したがって、上記のように、すべてのホストは、SSH 経由のリモート コマンドとして、他のすべてのホスト上でコマンド「hostname」を実行しようとします。
したがって、次の呼び出しが 20 回 (クラスター ホストごとに 1 回) 発生します。
ssh 'pdsh -g all "hostname"'
その結果、次の呼び出しが 20 * 20 = 400 回発生します。
ssh <hostname> hostname
つまり、非常に短い時間内に合計 20 + 400 = 420 の SSH 認証が発生することになります。
私が見ている問題は、少数の認証失敗です。失敗が発生するホストは任意です。理由はありません。失敗は次のようになります。
host-5: host-3: Permission denied, please try again.
host-5: host-3: Permission denied, please try again.
host-5: host-3: Received disconnect from UNKNOWN: 2: Too many authentication failures for myuser
host-5: pdsh@host-5: host-3: ssh exited with exit code 255
私は次のように設定していますsshd_config は、認証対象のセッションが多数同時に存在できるようにするには:
MaxStartups 500:30:600
これはやりすぎであることに注意してください。クラスタ全体で行われる認証の数を考慮していますが、実際に考慮する必要があるのは、特定のホストで行われる認証の数だけです。したがって、問題は他の場所にあると思います。
つまり、要約すると、非常に短い期間に 20 台のホストのクラスター全体で Kerberos 経由で大量の SSH ユーザー認証が発生しました。ユーザー認証のランダムな失敗が発生しています。
このようなユーザー認証の失敗はなぜ発生するのでしょうか?
答え1
同じホストへの SSH セッションを再度開く場合は、コントロール マスター接続を使用することをお勧めします。基本的に、認証されたセッションはクライアントとサーバーによって保持され、認証の繰り返しを回避します。