sshd: отказ в подключении из-за MaxStartups
Параметр MaxStartups ограничивает число подключений, не прошедших аутентификацию. Это защита от наплыва: при превышении часть новых соединений отклоняется случайным образом. Под нагрузкой от систем развёртывания это выглядит как случайные отказы.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Много одновременных подключений от системы развёртывания
Средства управления конфигурацией подключаются ко многим машинам сразу и могут открывать несколько соединений на машину.
-
Подбор пароля извне
Поток попыток входа исчерпывает предел, и законные подключения тоже отклоняются. Это и есть назначение защиты.
-
Медленная аутентификация держит соединения
Если проверка идёт через внешний каталог, каждое подключение долго остаётся незавершённым. Предел исчерпывается при небольшом числе клиентов.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Действующие пределы.
sudo sshd -T | grep -iE "maxstartups|maxsessions"Записи об отказах из-за предела.
sudo journalctl -u ssh -n 50 --no-pager | grep -i maxstartupsРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Средства управления конфигурацией подключаются ко многим машинам сразу и могут открывать несколько соединений на машину.
- Как проверить
-
Посмотрите значение и записи об отказах.
sudo sshd -T | grep -i maxstartups sudo journalctl -u ssh -n 40 --no-pager | grep -i "exceeded MaxStartups"
- Как исправить
- Поднимите предел с учётом нагрузки или включите повторное использование соединений на стороне клиента.
- Почему происходит
- Поток попыток входа исчерпывает предел, и законные подключения тоже отклоняются. Это и есть назначение защиты.
- Как проверить
-
Посмотрите частоту неудачных попыток.
sudo journalctl -u ssh --since "1 hour ago" --no-pager | grep -ci "failed password"
- Как исправить
- Ограничьте доступ по адресам, включите защиту от подбора и отключите вход по паролю: тогда предел перестанет исчерпываться.
- Почему происходит
- Если проверка идёт через внешний каталог, каждое подключение долго остаётся незавершённым. Предел исчерпывается при небольшом числе клиентов.
- Как проверить
-
Посмотрите время входа и настройки аутентификации.
sudo sshd -T | grep -iE "usedns|gssapi"
- Как исправить
- Отключите ненужные способы аутентификации и обратное разрешение имён: это заметно ускоряет вход.
Пример вывода
Предел незавершённых подключений исчерпан. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
sshd[1100]: error: beginning MaxStartups throttling
sshd[1100]: drop connection #11 from [<адрес>]:54321 on [<адрес>]:22 past MaxStartups
Связанные ошибки
- sshd: Too many authentication failures Соединение обрывается до ввода пароля: клиент перебрал все ключи из агента. Как ограничить набор ключей.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
- Gunicorn: WORKER TIMEOUT в журнале службы Рабочие процессы Gunicorn убиваются по таймауту: медленные запросы, блокирующие вызовы, неверный тип обработчика.
- Host key verification failed при подключении к серверу Клиент отказывается подключаться: ключ хоста изменился. Когда это переустановка, а когда повод насторожиться.
- MySQL: Too many connections База отказывает в новых подключениях: исчерпан max_connections или предел дескрипторов службы.
- PostgreSQL: too many clients already База отказывает в подключениях: исчерпан max_connections. Как считать значение и зачем пул соединений.
- kernel: TCP: request_sock … overflow Соединения теряются при наплыве: переполнена очередь ожидающих соединений. Как считать somaxconn и backlog.
- nginx: worker_connections are not enough nginx под нагрузкой: не хватает соединений на рабочий процесс. Как считать worker_connections вместе с LimitNOFILE.
Где встречается чаще всего
Источники
- Документация OpenSSH: MaxStartups
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено параллельными подключениями при MaxStartups=3.