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. Я вообще считаю правильным, чтобы для каждого узла или сервиса была своя пара ключей.
Причина проблемы следующая:
- Если в настройках подключения не указано, какой ключ использовать, агент SSH начинает перебирать все доступные ключи.
- Получив отказ при попытке подключения с одним узлом, агент пробует подключиться со следующим.
- Примерно после третьей попытки сервер SSH на удалённом узле решает, что его пытаются взломать тупым перебором. Он блокирует ваш IP-адрес и выдаёт указанное выше сообщение об ошибке.
Решения
Явное указание ключа SSH
В аргументах команды SSH можно явно задать путь к приватному ключу, который нужно использовать при подключении:
ssh <user>@<host> -i /path/to/private/key
В этом случае перебора не происходит, сервер SSH не блокирует ваш IP-адрес.
Создание файла настроек
Если подключаться к разным узлам приходится часто, а тратить время на указание нужного ключа не хочется, проще заполнить файл настроек.
Создайте в каталоге
~/.ssh/
файлconfig
.Добавьте в файл
~/.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
.