Too many authentication failures: SSH исчерпал попытки
Received disconnect from 10.0.0.5 port 22:2: Too many authentication failures и следом Permission denied (publickey) — это не «сервер сломан» и не обязательно неверный пароль. Клиент потратил лимит попыток, пока перебирал ключи из агента, и до нужного метода так и не дошёл.
Лимит задаёт MaxAuthTries на сервере (по умолчанию 6). Каждый предложенный публичный ключ — отдельная попытка. Пять ключей в ssh-agent плюс ещё один «не тот» — и соединение рвётся до пароля и до правильного ключа.
Почему так выходит
SSH сначала спрашивает сервер, какие методы он принимает, затем клиент идёт по своему порядку. По умолчанию в начале стоит publickey. Пока агент совал ключи, сервер уже посчитал неудачи.
| Что хотели | Что произошло |
|---|---|
| Войти по ключу | Нужного ключа нет в authorized_keys, он не в агенте, или он пятый в очереди — лимит кончился раньше |
| Войти по паролю | Сервер объявил publickey, клиент начал перебор, приглашения пароля так и не было |
| Пароль из PAM / внешней службы | Клиент шлёт password, сервер ждёт keyboard-interactive |
Ключ «лежит в ~/.ssh» недостаточно: OpenSSH предлагает идентичности агента, а не «файл, который вы имели в виду». Список того, что реально уйдёт на сервер:
Пустой агент или «ключ не тот» — смотреть -vvv, а не гадать.
Сначала лог клиента
Третий уровень отладки показывает порядок методов и каждый предложенный ключ:
Искать:
Authentications that can continue— что разрешил сервер;Offering public key/get_agent_identities— какие ключи уходят;Too many authentication failures— лимит попыток, не «пароль неверный».
Типичная картина: агент отдаёт id_rsa, id_ed25519, ключ от GitLab, ключ от bastion — четыре отказа, пятый ещё не тот, шестой уже не принимают.
Не предлагать все ключи
IdentitiesOnly yes запрещает клиенту подмешивать все идентичности агента. Дальше работает только то, что задано через IdentityFile или -i.
На один хост, не в глобальный /etc/ssh/ssh_config:
Разово:
После этого в -vvv должен остаться один Offering public key. Если вместо too many пришло Permission denied (publickey) — перебор закончился, ключ просто не приняли: его нет в authorized_keys или не тот файл.
IdentitiesOnly без IdentityFile оставляет дефолтные id_ed25519 / id_rsa в домашнем каталоге и не тащит весь агент. Для стенда с отдельным ключом всегда указывайте файл явно.
Пароль, когда ключей много
Клиент не спросит пароль, пока не исчерпает publickey. Отключить ключи и поставить пароль первым:
В ~/.ssh/config:
На Ubuntu и везде, где пароль идёт через PAM, сервер часто объявляет keyboard-interactive, а не password. Тогда предыдущая команда молча не сработает. Заменить метод:
Какой метод сервер реально предлагает — снова строка Authentications that can continue в -vvv.
Что смотреть на сервере
Нужен другой канал: консоль гипервизора, VNC, serial. Иначе вы в той же ошибке, что чините.
Логи. На Ubuntu 24.04 юнит называется ssh (алиас sshd). Для разбора неудачных ключей поднять подробность:
В логе будет, какой ключ отвергли и дошли ли до MaxAuthTries.
Права. При StrictModes yes (дефолт) sshd молча игнорирует слишком открытые файлы:
Публичный ключ — одна строка в authorized_keys, парный приватный — тот, что в IdentityFile.
Лимит попыток. Если агент толстый, а ключей на хост много, можно поднять порог (это ослабляет защиту от перебора):
Надёжнее не поднимать лимит, а сузить клиент: IdentitiesOnly + один IdentityFile на Host.
Короткий чеклист
ssh -vvv— сколько ключей ушло и какой метод остался.ssh-add -l— что лежит в агенте; лишнее не предлагать.- В
~/.ssh/configдля хоста:IdentitiesOnly yesи явныйIdentityFile. - Нужен пароль —
PubkeyAuthentication noи тот метод, который сервер написал в debug (passwordилиkeyboard-interactive). - С консоли сервера:
journalctl -u ssh, права~/.sshиauthorized_keys, при необходимостиLogLevel VERBOSE.
Ошибка про «too many» почти всегда на клиенте: слишком много ключей на одну попытку входа. Сервер лишь считает до шести и закрывает сессию.