Сообщение об ошибке
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Также выводится как
- IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
- Offending ED25519 key in /root/.ssh/known_hosts:1
Выводится блоком между строками из символов `@`; за ним следуют отпечаток нового ключа, проблемная строка known_hosts и «Host key verification failed.».
OpenSSH client — host key differs from the one recorded in known_hosts
Что это означает
Сервер предъявил ключ хоста, который отличается от ключа, записанного в `known_hosts` для этого имени хоста или адреса. ssh не может отличить законную смену (переустановка, новая машина за тем же IP) от перехвата соединения, поэтому в пакетном режиме отказывается продолжать, а в остальных случаях отключает аутентификацию по паролю и keyboard-interactive. Строка «Offending … key in …:N» показывает, в какой строке known_hosts хранится старый ключ.
Почему это происходит
Сервер развернули заново
частоПереустановка, повторное развёртывание из образа или контейнер, который генерирует ключи хоста при запуске, создают новые ключи хоста под тем же именем.
Адрес теперь принадлежит другой машине
частоОблачные IP-адреса и аренды DHCP переиспользуются. В записи, сделанной по IP, остаётся ключ старой машины.
Несколько хостов с разными ключами за одним именем
иногдаИз-за round-robin DNS или TCP-балансировщика нагрузки перед серверами с разными ключами хоста предупреждение появляется случайным образом.
Соединение перехватывает посредник
редкоРедкий случай, но проверка существует именно ради него: скомпрометированная сеть, вредоносная сеть Wi-Fi или перехваченный DNS отвечают собственным ключом. Проверьте ключ, прежде чем принять его.
Как исправить
- 1.
Проверьте новый ключ, затем замените запись
Сравните новый отпечаток с отпечатком из доверенного источника; только после этого удалите старую строку через `ssh-keygen -R` (и по имени, и по IP).
bash # 1. Get the new fingerprint from a trusted channel (cloud console, provisioning logs, the admin) ssh-keyscan -t ed25519 server.example.com 2>/dev/null | ssh-keygen -lf - # 2. Only if it matches: remove the old entry and connect again ssh-keygen -R server.example.com ssh-keygen -R 203.0.113.10 - 2.
Используйте сертификаты хостов SSH для парка серверов
Клиенты, которые доверяют CA хостов, принимают пересобранные серверы с новыми ключами, подписанными этим CA, без закрепления ключа для каждого хоста.
text # known_hosts: trust host keys signed by your SSH CA instead of pinning each key @cert-authority *.internal.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... ssh-host-ca