#Что происходит и когда это важно
SSH возвращает Too many authentication failures или Permission denied (publickey), хотя нужный ключ на компьютере существует.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| ssh-agent предлагает много ключейКлиент пробует несколько идентификаторов до нужного. | В ssh -v много Offering public key. | Ограничить IdentitiesOnly для конкретного хоста. |
| Выбран не тот пользователь или алиасНужный ключ связан с другой учётной записью сервера. | Клиент подключается под неправильным User. | Указать правильный User в Host. |
| Нужного ключа нет на сервереДаже выбранный ключ не соответствует authorized_keys. | Клиент предлагает ожидаемый ключ, сервер его отклоняет. | Проверить публичную часть и авторизацию у администратора. |
#Пошаговая диагностика и исправление
- Не удаляйте ключи из агентaОткройте терминал на компьютере-клиенте. Если имеются разные серверы/учётные записи, не очищайте
~/.sshи не используйте временное отключение проверки host key. Сначала выясните, какой ключ нужен конкретному серверу. - Посмотрите имеющиеся публичные ключиВыполните
ls -l ~/.ssh/*.pubиssh-add -l. Вторая команда показывает отпечатки ключей агента, а не содержимое закрытых ключей; если агент недоступен, это не значит, что ключи на диске отсутствуют. - Найдите фактически предлагаемые ключиВыполните
ssh -v пользователь@серверс настоящими именами. Найдите строкиOffering public key,Trying private key,Server accepts key. Не публикуйте закрытый ключ, а в отчётах скрывайте имена серверов и пользователей. - Выполните пробный вход только с нужной идентичностьюКогда подтверждён путь к личному закрытому ключу, запустите
ssh -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes пользователь@сервер, заменив файл ключа и учётную запись реальными. Опция IdentitiesOnly запрещает использовать лишние идентификаторы из агента, а-iзадаёт выбранный файл. Не отправляйте этот файл никому. - Сохраните настройки для конкретного алиасаОткройте
~/.ssh/configтекстовым редактором. Создайте блокHost мой-серверсHostName,User,IdentityFileиIdentitiesOnly yesтолько для него. Убедитесь, что другие аккаунты имеют собственные блоки и не наследуют чужую настройку. - Проверьте итоговый выборВыполните
ssh -G мой-сервер | grep -Ei "^(user|hostname|identityfile|identitiesonly) ". Вывод позволит убедиться в правильном имени и выбранном пути. Затем подключитесь черезssh мой-сервери проверьте успешный вход. - Отделите отказ сервераЕсли правильный ключ предложен, но не принят, на сервере проверьте его публичную часть в authorized_keys и права по инструкции владельца. Не изменяйте серверную политику MaxAuthTries ради одного клиента. Для отката удалите лишь свой блок Host.
#Команды из инструкции с пояснениями
ssh-add -lssh -v пользователь@серверssh -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes пользователь@сервер#Как проверить результат
Правильная учётная запись открывается с выбранным ключом, остальные серверы продолжают пользоваться своими ключами.
#Если проблема не устранена
Если нужный ключ не принимается, сравните отпечаток его публичной части с authorised_keys на сервере через администратора; не создавайте новые ключи до выяснения наличия резервных.