Что означает ошибка SSH_ERR_HKEY
Когда вы запускаете ssh user@host и видите сообщение “Невозможно проверить ключ хоста” (или на английском — ssh: Could not connect to secure shell server: Invalid host key), SSH-клиент отклоняет подключение, потому что публичный ключ сервера не совпадает с тем, что сохранён в файле ~/.ssh/known_hosts. Эта ошибка означает, что сервер, к которому вы подключаетесь, либо изменился (например, переустановили ОС), либо файл known_hosts устарел.
Причины возникновения
- Устаревший ключ в known_hosts — ключ хоста не обновлялся после переустановки сервера или смены IP.
- Изменение SSH-конфигурации сервера — новый ключ сгенерирован другим SSH-демоном (например, новым RSA/Ed25519 ключом).
- Несоответствие между IPv4/IPv6 или DNS-именем — в файле записан один адрес, а подключение происходит по другому.
- Повреждение файла known_hosts — случайное редактирование или перезапись файла.
- Настройки клиента, запрещающие проверку —
StrictHostKeyChecking=noв конфигурации SSH-клиента.
Способы решения
Способ 1: Обновление ключа через SSH
- Проверьте запись ключа в known_hosts
Запустите
grep -E "^[0-9.]+" ~/.ssh/known_hostsилиgrep <IP>для поиска записи нужного хоста. - Удалите устаревший ключ
Удалите строку с помощью
sed -i "/^<IP>/d" ~/.ssh/known_hostsили отредактируйте файл вручную. - Подключитесь, чтобы добавить новый ключ
Выполните
ssh -o StrictHostKeyChecking=yes user@host. SSH-клиент автоматически добавит новый ключ в known_hosts. - Проверьте, что ключ записан
Запустите
ssh user@host— теперь подключение должно установиться без ошибки проверки.
Способ 2: Использование ssh-keygen для удаления ключа
- Определите хост/IP Запомните IP или DNS-имя, для которого нужна очистка.
- Удалите ключ вручную
Выполните
ssh-keygen -R <IP> -f ~/.ssh/known_hosts. Если файл находится в стандартном месте, командаssh-keygen -R <IP>suffices. - Повторите попытку подключения
После удаления запустите
ssh user@host— система запросит новый ключ.
Способ 3: Корректировка настроек SSH-клиента
- Откройте файл конфигурации
Используйте редактор, например
nano ~/.ssh/config. - Добавьте параметры проверки
Вставьте следующие строки:
Host * StrictHostKeyChecking yes UserKnownHostsFile=.ssh/known_hosts - Сохраните и выйдите Нажмите Ctrl+O, Enter, затем Ctrl+X.
- Примените изменения
Запустите
ssh -o StrictHostKeyChecking=yes user@host— клиент будет принудительно проверять ключи.
Способ 4: Ручное редактирование known_hosts
- Откройте файл
nano ~/.ssh/known_hosts. - Удалите все строки, содержащие старый ключ
Используйте
sed -i '/^<IP>/d' ~/.ssh/known_hostsили вручную удалите нужные строки. - Сохраните изменения
- Подключитесь для добавления нового ключа
ssh -o StrictHostKeyChecking=yes user@host. - Проверьте результат
ssh user@host— ошибка исчезнет.
Профилактика
- Регулярно обновляйте known_hosts после изменения IP или переустановки сервера.
- Используйте
ssh-keygen -Rдля быстрой очистки устаревших ключей. - Ведите резервную копию
~/.ssh/known_hostsв облаке или на USB-накопителе. - Настройте автоматическую проверку в конфигурации клиента (
StrictHostKeyChecking=yes), чтобы избежать пропуска проверок. - Следите за изменениями SSH-конфигурации сервера и фиксируйте новые ключи в репозитории (если вы администрируете несколько хостов).
Часто задаваемые вопросы
Почему появляется сообщение «Невозможно проверить ключ хоста» при подключении по SSH?
Можно ли отключить проверку ключа хоста для быстрого подключения?
Как обновить известный ключ хоста в файле known_hosts?
Какие версии OpenSSH склонны к этой ошибке?
Полезное
Проверьте запись ключа в known_hosts
Удалите устаревший ключ
Подключитесь, чтобы добавить новый ключ
Проверьте, что ключ записан
Настройте автоматическую проверку в SSH-клиенте
Очистите старые записи вручную