0064 — Received disconnect from host: Too many authentication failures

Содержимое страницы

Проблема

При попытке подключения к нужному узлу по SSH в терминал выводится сообщение об ошибке:

Received disconnect from <HOST> port 22:2: Too many authentication failures
Disconnected from <HOST> port 22

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

Причина проблемы следующая:

  1. Если в настройках подключения не указано, какой ключ использовать, агент SSH начинает перебирать все доступные ключи.
  2. Получив отказ при попытке подключения с одним узлом, агент пробует подключиться со следующим.
  3. Примерно после третьей попытки сервер SSH на удалённом узле решает, что его пытаются взломать тупым перебором. Он блокирует ваш IP-адрес и выдаёт указанное выше сообщение об ошибке.

Решения

Явное указание ключа SSH

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

ssh <user>@<host> -i /path/to/private/key

В этом случае перебора не происходит, сервер SSH не блокирует ваш IP-адрес.

Создание файла настроек

Если подключаться к разным узлам приходится часто, а тратить время на указание нужного ключа не хочется, проще заполнить файл настроек.

  1. Создайте в каталоге ~/.ssh/ файл config.

  2. Добавьте в файл ~/.ssh/config настройки подключения к нужным узлам:

    Host <name>
        Hostname       <host>
        IdentityFile   ~/.ssh/<private_key>
        IdentitiesOnly yes
    

    Пример:

    Host GitHub
        Hostname       github.com
        IdentityFile   ~/.ssh/github.com
        IdentitiesOnly yes
    

    Подсказка: Очень удобно хранить ключи в файлах с названиями FQDN узлов, сразу понятно, какой ключ от чего. Попробуйте угадать с одного раза, какой ключ для какого сервиса я использую:

    • github.com;
    • gitlab.com;
    • gitflic.com;
    • reg.ru.