#Как распознать проблему и когда применять инструкции
После переноса виртуальной машины, смены IP или переустановки сервера клиент SSH замечает иной ключ хоста. Надо отличить ожидаемую замену сервера от перехвата соединения и только потом менять запись known_hosts. Уточните модель/сборку системы, наличие резервной копии и способ восстановить доступ, прежде чем применять действия.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Пересоздана системаПри переустановке создан новый ключ /etc/ssh/ssh_host_*_key | У администратора есть новая проверенная отпечатка | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| Домен указывает не тудаЗапись DNS уже новая или используется чужой IP | Разные адреса для имени и IP | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| Вмешательство в соединениеИзменение ключа ничем не подтверждено | Нельзя доверять новому ключу до сверки | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
#Подробная проверка и безопасное решение
- Шаг 1. Остановитесь на предупреждении и зафиксируйте адресПри сообщении REMOTE HOST IDENTIFICATION HAS CHANGED не вводите пароль и не добавляйте ключ автоматически. Запишите имя, порт, старый и предложенный отпечатки. Если перенос не согласован, обратитесь к владельцу инфраструктуры.
- Шаг 2. Выясните, куда идёт SSH-подключениеНа своём компьютере откройте терминал. Команда показывает итоговый HostName/Port из конфигурации; для псевдонима настройки могут отличаться от прямого адреса. Проверьте адрес сервера в панели хостера.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ssh -G server.example.org | grep -E '^(hostname|port|user) '
- Шаг 3. Сверьте новый ключ через независимую доверенную консольОткройте консоль сервера через панель провайдера, а не заблокированный SSH. На сервере посмотрите отпечаток публичного ключа ED25519. Сравните именно SHA256-отпечаток с показанным клиентом, учитывая алгоритм. Если такой ключ отсутствует, проверяйте реально существующий публичный ключ.
- Выполняется в терминале сервера с правами администратора; требуется разрешение владельцаLinux · Терминал (Bash)КомандаНужен sudoВыполняется в терминале сервера с правами администратора; требуется разрешение владельца. Уточните фактические адреса и имена, прочитайте вывод и не выполняйте действия, если среда отличается от описанной.
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
- Шаг 4. Создайте резервную копию старого спискаНа компьютере, с которого подключаетесь, скопируйте known_hosts, чтобы можно было вернуть предыдущую запись. Наличие хешированных имён нормально: редактирование вручную часто неудобно.
- Если файла нет, сначала проверьте ls -l ~/.ssh и пропустите копированиеLinux · Терминал (Bash)КомандаЕсли файла нет, сначала проверьте ls -l ~/.ssh и пропустите копирование.
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.before-server-move
- Шаг 5. Удалите только подтверждённую старую записьТолько если отпечаток получен из независимой доверенной консоли, удалите запись для конкретного имени. Для нестандартного порта используйте форму [host]:port. Команда не удаляет закрытые ключи.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ssh-keygen -R server.example.org
- Шаг 6. Подключитесь повторно и проверьте отпечатокВведите команду со своим именем и адресом. При новом запросе подтверждения сверяйте SHA256-отпечаток с доверенной консолью. Согласны — подтвердите сохранение ключа; не совпадает — прервите соединение.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ssh -o StrictHostKeyChecking=ask user@server.example.org
- Шаг 7. Убедитесь, что вход работает и предупреждение не возвращаетсяОткройте вторую SSH-сессию и проверьте имя хоста после входа; первоначальный доступ не закрывайте до проверки. Если предупреждение повторяется, выясните балансировщик, несколько адресов или смену ключа при каждой загрузке.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
hostnamectl --static
#Как проверить результат и что делать, если не помогло
Установлена связь с ожидаемым сервером, отпечаток совпал с доверенной консолью, при повторном подключении предупреждения нет. Нельзя автоматически принимать новый ключ без независимой сверки. Если симптомы не исчезли, сохраните точное сообщение об ошибке и выполненные проверки; не повторяйте опасные процедуры циклически.