#Что означает ошибка
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! Host key verification failed.
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! и Host key verification failed означают, что отпечаток ключа сервера не совпадает с записанным в ~/.ssh/known_hosts. Причины безобидные (сервер переустановлен, IP перешёл к другой машине, сменился ключ) и опасные (атака «человек посередине»).
Прежде чем удалять запись, убедитесь, что смена ключа ожидаема.
Сверьте отпечаток по независимому каналу.
SSH предупреждает, что ключ сервера изменился. Чаще всего сервер переустановлен либо IP назначили другой машине, но это может быть и перехват соединения, поэтому убедитесь, что смена ожидаема.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Сервер переустановлен | Новый ключ. | Удалите старую запись. |
| IP принадлежит другому серверу | Переиспользование. | Проверьте. |
| Возможна атака посредника | Неожиданно. | Не подключайтесь. |
| Изменён ключ хоста | Администратор. | Уточните отпечаток. |
#Пошаговое решение
- Прочитайте номер строки в known_hostsВ терминале вашего компьютера повторите SSH-подключение и сохраните сообщение
REMOTE HOST IDENTIFICATION HAS CHANGED, имя узла, тип ключа и местоknown_hosts. Это предупреждение может означать как переустановку сервера, так и подмену соединения; пока подлинность ключа не подтверждена, не вводите пароль и не отключайтеStrictHostKeyChecking. - Убедитесь, что смена ключа ожидаемаСвяжитесь с администратором сервера по уже известному надёжному каналу (панель провайдера, корпоративный телефон). Спросите, действительно ли меняли сервер, DNS-адрес или SSH-ключ, и получите отпечаток нового публичного ключа оттуда, а не из самого подозрительного сеанса SSH.
- Сверьте отпечатокАдминистратор на консоли подлинного сервера может выполнить
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubи передать отпечаток по независимому каналу. На клиенте можно посмотреть предлагаемый ключ черезssh-keyscan -t ed25519 имя-хоста | ssh-keygen -lf -, но сканирование не подтверждает подлинность: сравните точные символы отпечатка с доверенным значением. - Удалите старую записьТолько после совпадения отпечатка сделайте копию
~/.ssh/known_hosts, затем на своём компьютере выполнитеssh-keygen -R имя-хоста; для нестандартного порта укажите запись[имя-хоста]:порт. Если подключаетесь и по IP, проверьте и соответствующую запись IP. Эта команда меняет лишь доверенные ключи клиента; сервер она не трогает. - Подключитесь заново и подтвердите ключПовторно подключитесь
ssh пользователь@имя-хоста. Клиент покажет новый отпечаток — ещё раз сравните его с полученным независимо, и лишь при полном совпадении подтвердитеyes. Если отпечаток отличается, прекратите подключение и исследуйте DNS, адрес и возможную подмену; отсутствие предупреждения само по себе не доказывает безопасность. - Удаляет старую запись хоста из known_hostsLinux · Терминал (Bash)КомандаУдаляет старую запись хоста из known_hosts.
ssh-keygen -R example.com
#Если не помогло
Не удаляйте запись автоматически, если смена ключа неожиданна: это может быть признаком атаки.
#Проверка
Спросите администратора или проверьте в панели хостинга: сервер переустанавливали? Получите отпечаток с самого сервера через консоль: ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub. Сравните с тем, что показывает клиент: ssh-keyscan -t ed25519 host | ssh-keygen -lf -. Если отпечатки совпадают, всё в порядке; если нет и перемен не было — не подключайтесь, возможна подмена.
#Удаление старой записи
Удалите строку из known_hosts: ssh-keygen -R host (или ssh-keygen -R 203.0.113.10, и отдельно для IP, и для имени). Номер строки указан в сообщении (Offending ECDSA key in /home/user/.ssh/known_hosts:12): можно удалить его вручную: sed -i '12d' ~/.ssh/known_hosts. Подключитесь снова и подтвердите новый отпечаток yes.
#Особые ситуации
Для облачных серверов, часто меняющих IP, и для автоматизации используйте псевдонимы имён и HostKeyAlias в ~/.ssh/config. Не отключайте проверку навсегда (StrictHostKeyChecking no): это ослабляет защиту; для временных тестовых машин используйте -o UserKnownHostsFile=/dev/null разово. Если на одном IP сервера по очереди (балансировщик), у них должны быть одинаковые ключи хоста.
ssh-keyscan -t ed25519 host.example.com | ssh-keygen -lf -# Полученный отпечаток обязательно сверьте с доверенным источником!# ssh-keygen -R host.example.com используйте ТОЛЬКО после подтверждения смены ключа.