DataLife Engine / SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

При подключении к серверу по SSH вы можете получить ошибку "Received disconnect from x.x.x.x port 22:2: too many authentication failures" или "ssh permission denied (publickey)". Если кратко, это означает, что ваш SSH клиент не смог авторизоваться на удаленном сервере из-за исчерпания лимита попыток авторизации.

В этой статье мы рассмотрим почему могла возникнуть такая проблема, как это всё работает, а также как её исправить и настроить систему, чтобы такого не случалось в будущем для этого SSH-соединения. При написании статьи использовалась Ubuntu 24.04, но информация должна быть актуальной и для других дистрибутивов.


Содержание статьи

Почему возникает ошибка?

SSH поддерживает несколько способов авторизации, основные из них - авторизация без пароля с помощью пары открытого и закрытого ключей и обычная авторизация с помощью пароля. Разумеется, первый вариант более надежный, удобный и безопасный, поскольку вам не нужно помнить пароль, а злоумышленники, которые захотят проникнуть на ваш сервер, не смогут даже попытаться его подобрать.

Поэтому авторизация по ключу используется по умолчанию. В большинстве случаев это не является проблемой, так как сервер сообщает клиенту какие методы авторизации можно использовать, а клиент выбирает порядок, в котором он будет их перебирать. Но общее количество попыток авторизации ограничено. И если что-то не совпадает, и клиент не успевает авторизоваться, тогда возникает такая ошибка.

Если вы так и хотели авторизоваться по ключу, то здесь есть три возможные причины проблемы:

Если же вы хотите авторизоваться по паролю, то всё немного иначе:

В любом случае нет смысла пытаться угадать в чем там проблема. Нужно посмотреть логи. Для этого добавьте к вашей команде подключения к серверу по SSH опцию -vvv. Например:

ssh -vvv serhii@192.168.56.124

Такая команда покажет не только саму ошибку, но и процесс подключения. Сначала команда выведет много информации о чтении конфигурации. Обратить внимание нужно на строку preferred, в которой перечислен порядок механизмов авторизации, которые клиент будет использовать:

SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

А также на процесс авторизации, какие ключи (get_agent_identities) используются, и где происходит ошибка:

SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

Как исправить ошибку?

В этой статье я не буду рассматривать как добавить ключ на сервер, настроить там права на файл ~/.ssh/authorized_keys и тому подобное. Предположим, что сервер настроен правильно, он готов авторизовать вас по ключу или по паролю. Теперь остается понять как настроить SSH клиент так, чтобы все заработало.

1. Не перебираем все ключи

Как я и писал выше, по умолчанию SSH клиент пытается авторизоваться с помощью всех доступных в системе ключей, вот:

SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

И соответственно получает ошибку от сервера, если первые четыре ключа не подходят. Но можно сделать по-другому. С помощью опции IdentitiesOnly можно сообщить SSH клиенту, что вы хотите, чтобы использовались только ключи, перечисленные с помощью опции IdentifyFile в конфигурации. Для этого добавьте опцию IdentitiesOnly со значением yes в файл /etc/ssh/ssh_config:

IdentitiesOnly=yes

После этого процесс авторизации будет выглядеть вот так:

SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

Все эти ключи перечислены в том же файле /etc/ssh/ssh_config, и в следующем пункте рассмотрим как настроить свой ключ. Уже этот шаг может решить проблему с "too many authentication failures". Но если вместо неё появилась ошибка "ssh permission denied (publickey)", то двигаемся дальше.

2. Указываем ключ для авторизации

Вы можете точно указать какой ключ хотите использовать с помощью опции IdentityFile. В команду подключения нужно передать путь к файлу приватного ключа для авторизации, в моем случае ~/.ssh/id_ed25519_7:

ssh -o IdentityFile=~/.ssh/id_ed25519_7 serhii@192.168.124.58

Чтобы не добавлять эту опцию при каждом запуске команды, её можно прописать для данного хоста в файле ~/.ssh/config:

Host 192.168.124.58 IdentityFile ~/.ssh/id_ed25519_7

После этого данный ключ будет использоваться для всех SSH подключений к этому хосту.

3. Авторизуемся по паролю

Если нужно авторизоваться по паролю, но в системе есть ключи, то соответственно клиент будет перебирать сначала их, и пароль ввести не предложит. Чтобы это решить можно изменить порядок способов авторизации для данного подключения с помощью опции PreferredAuthentications, и заодно отключить на всякий случай авторизацию по ключу, и включить по паролю:

ssh -o PubkeyAuthentication=no -o PasswordAuthentication=yes -o PreferredAuthentications=password serhii@192.168.124.58

То же самое можно настроить для этого хоста в файле ~/.ssh/config:

Host 192.168.124.58 PubkeyAuthentication no PasswordAuthentication yes PreferredAuthentications password

4. Указываем механизм авторизации

Иногда вместо механизма авторизации password сервер может использовать keyboard-interactive. Обычно это происходит, когда для авторизации используется не пароль пользователя Unix, а пароль из какой-либо внешней службы авторизации. В таком случае команда, описанная в предыдущем пункте, работать не будет, и вместо неё нужно использовать следующую:

ssh -o PubkeyAuthentication=no -o PreferredAuthentications=keyboard-interactive serhii@192.168.124.58

И соответственно настройки для ~/.ssh/config будут немного отличаться:

Host 192.168.124.58 PubkeyAuthentication no PreferredAuthentications keyboard-interactive

Что проверить на сервере?

1. Логи

Если у вас есть доступ к серверу, физический или в консоли VPS, то прежде всего нужно посмотреть там логи авторизации. Для того чтобы включить режим отладки для службы ssh нужно добавить такую строку в /etc/sshd_config:

LogLevel VERBOSE

После этого необходимо перезапустить службу:

sudo systemctl restart ssh

По умолчанию логи записываются в файл /var/log/auth.log:

SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

2. Права доступа

Права на файл ~/.ssh/authorized_keys должны быть 600:

ls -l ~/.ssh/authorized_keys
SSH-блокировка: Как обойти ошибку "Too Many Authentication Failures"

Выводы

В этой статье мы рассмотрели как исправить ошибку too many authentication failures и permission denied (publickey) при подключении по SSH. Я рассказал о том, как решал подобные проблемы, когда они возникали в моей работе. Возможно, существуют и другие случаи, не описанные в статье, которые приводят к такой ошибке. Если вы знаете другие методы решения, делитесь в комментариях!

31-10-2025, 23:00
Вернуться назад