株式会社オズビジョンのユッコ (@terra_yucco) です。
ssh 呼び出しのバッチが動かないトラブルを調べた話【vol.1】 の続きの記事 (解決編) となります。
仕込んだ処理で得られたログ
かなり抜粋しましたが END,255
となっている処理の中では ssh 関連のエラーメッセージが出ています。
[2019-06-25 20:53:01][913] START,-,host_user_batch01 /path/to/starting_sh/user_log.sh action
[2019-06-25 20:53:01][913] command,ssh -i /path/to/key root@host_user_batch01 /path/to/starting_sh/user_log.sh action
[2019-06-25 20:53:02][913] ssh_exchange_identification: Connection closed by remote host
[2019-06-25 20:53:02][913] END,255,host_user_batch01 /path/to/starting_sh/user_log.sh action
エラーメッセージ
ssh_exchange_identification: Connection closed by remote host
※ちなみにこれは stderr じゃなくて stdout に出ていました...。
このメッセージ
-
ssh_exchange_identificationと言われてknown_hosts消したりhosts.allowいじっても直らない時に確認してほしいこと
- IP が変わっている
-
.ssh/configの設定でエラー: ssh_exchange_identification: Connection closed by remote host
- ホスト名が数字で始まっている
など、様々なケースがあるようなのですが、今回の場合には sshd の接続数上限でした。
sshd の設定
$ sshd -T | grep max
x11maxdisplays 1000
maxauthtries 6
maxsessions 10
clientalivecountmax 3
maxstartups 10:30:100
sshd -T
では maxstartups
/etc/ssh/sshd_config
では MaxStartups
MaxStartups
この設定の意味は以下のとおりです。
a:b:c
認証前接続において
最初の a 本の接続は 100% 受け入れ
c 本になるまでの接続は b% の確率で受け入れる
c 本以上の接続は 100% 拒否
今回の原因
サーバのスペックが上がったことにより、同時に ssh 接続を要求する接続数が一気に跳ね上がり、鍵交換を待つプロセス数が上限を突破したものと思われます。
設定 10:100:10
とかでした。要するに一気に 11 本以上殺到したら確実に 1 本は弾かれる。
対処
以下の対処で 255 のログは出なくなりました。
$ echo "MaxStartups 100:30:150" >> /etc/ssh/sshd_config
$ service sshd restart
Conclusion
-
ssh_exchange_identification: Connection closed by remote host
と言われた場合には接続数上限超過のケースもある - 上限超過した場合 ssh は 255 を返す