事の発端
ssh 接続時に下記のエラーが頻発するようになったことで調査をしました。
ssh_exchange_identification: Connection closed by remote host
結論として、MaxStartups
の設定を引き上げることで問題が解決しました。
MaxStartups とは
sshd_config の日本語訳では下記の様に記載されています。
MaxStartups (最大起動数)
認証されていない段階の接続をSSH デーモンが最大でどれだけ受けつけるかを指定します。
この値を超えた (認証されていない段階の) 接続は捨てられます。
この状態は (すでに接続したクライアントの) 認証が成功するか、そのLoginGraceTime(ログイン猶予時間) が切れるまで続きます。
…
つまり ssh 接続した瞬間から認証OKとなるまでの間の最大接続数ということなのですが、Web でいろいろ見ていると、単なる同時接続数のように記載しているサイトが非常に多い印象です。
認証OK後の接続数は MaxStartups
には無関係ですので注意が必要です。
設定の意味
CentOS7 などのデフォルトでは 10:30:100
になっています。
これは、非認証な接続が 10 を超えるとそれ以降の接続を 30% の確率で拒否し、さらに 100 に達した時点でそれ以降の接続を全て拒否するという設定になります。
通常、非認証な接続が一気に 10 も来ることはほとんど無いと思いますので、いわゆる不正アクセス対策のための設定と考えて良いと思います。
しかし、自分の場合は正当な接続でこの制限に引っかかってしまったわけですが(/_\*)
検証方法
非認証の ssh 接続を一気に 10 以上発生させることは普通にやっていてはできません(^_^;) 効率よく検証するには、一気に同一サーバへ ssh 接続する様なスクリプトを作成することも可能ですが、Mac の Iterm2 の Broardcast Input などのようなマルチカーソル的なものを使って一気に ssh 接続を発生させるのがお手軽で簡単です。
すると、MaxStartups
に従って、いくつかのターミナルでは冒頭のエラーが発生することが確認できると思います。
コメント