#Что происходит и когда это важно
При подключении к знакомому адресу SSH отказывается продолжать обмен ключами, поскольку сохранённая подпись сервера отличается. Причиной может быть законная переустановка, подмена DNS/IP или атака посредника.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Ключ хоста изменился штатноПри переустановке сервера созданы новые host key. | Администратор подтверждает смену и точный fingerprint через консоль. | Сверить отпечаток по независимому каналу. |
| Адрес ведёт на другой серверDNS или маршрутизация указывает не туда. | Подключение к IP и имени приводит к разным машинам. | Проверить адрес, DNS и инвентаризацию. |
| Возможна подмена подключенияПри отсутствии подтверждения изменение нельзя доверять. | Смена неожиданная или публичная сеть сомнительна. | Прекратить вход до проверки у администратора. |
#Пошаговая диагностика и исправление
- Не отключайте проверку host keyПри первом предупреждении не вводите пароль и не используйте
StrictHostKeyChecking=noилиUserKnownHostsFile=/dev/null. Запишите имя сервера, порт и отпечаток, показанный клиентом, не нажимая подтверждение неизвестного ключа. - Свяжитесь с администратором независимым способомПопросите владельца сервера подтвердить, что переустановка была запланированной, и передать полный отпечаток нового ключа из консоли провайдера или другого доверенного канала. Сообщение в самом подозрительном SSH-сеансе не является независимой проверкой.
- Проверьте новый отпечаток на консоли сервераВ консоли доверенного сервера администратор выполняет
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub(если этот тип ключа включён) и передаёт отпечаток SHA256 отдельно. Не открывайте и не отправляйте закрытый/etc/ssh/ssh_host_ed25519_key. - Найдите прежнюю запись только для своего адресаНа клиенте выполните
ssh-keygen -F имя-сервера, заменив пример. Если SSH использует нестандартный порт, формат для поиска —[имя-сервера]:порт. Команда покажет существующую запись, если она есть, без изменения known_hosts. - Обновите запись только после подтвержденияКогда вы независимо удостоверились в новом отпечатке, на клиенте можно выполнить
ssh-keygen -R имя-серверас настоящим именем; это уберёт только соответствующую запись из пользовательского known_hosts. Для нестандартного порта укажите[имя-сервера]:порт. Не стирайте known_hosts целиком и не заменяйте глобальные ключи всей системы. - Снова подключитесь и проверьте отпечатокВыполните обычный
ssh пользователь@сервер, внимательно сравните отображаемый отпечаток с проверенным по независимому каналу и подтвердите только точное совпадение. Если есть хоть малейшее отличие, остановите подключение и проверьте DNS/IP.
#Команды из инструкции с пояснениями
ssh-keygen -F имя-сервераsudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub#Как проверить результат
SSH подключается без предупреждения, записанный новый host key совпадает с независимо подтверждённым ключом конкретного сервера.
#Если проблема не устранена
Если после правки предупреждение возвращается, проверьте балансировщик, IPv4/IPv6, другие порты и отдельные записи known_hosts. Не отключайте StrictHostKeyChecking.