Сообщение «The authenticity of host can't be established. The fingerprint for the ED25519 key sent by the remote host is SHA256:…» появляется при первом подключении к SSH-серверу, когда клиент ещё не знает его открытый ключ и просит подтвердить, что вы доверяете именно этому хосту. Это не ошибка и не сбой — это штатный механизм защиты протокола SSH от атаки «человек посередине» (MITM). Клиент показывает отпечаток ключа сервера и ждёт ответа yes или no: согласны ли вы сохранить этот ключ в файл known_hosts и продолжить соединение.
Проблема в том, что большинство пользователей машинально вводят yes, не сверяя отпечаток — и тем самым обесценивают всю защиту. Ниже разберём, что такое ED25519-ключ, откуда берётся fingerprint, как его корректно проверить и в каких ситуациях сообщение должно насторожить.
Что означает это сообщение на самом деле
При первом соединении по SSH сервер отправляет клиенту свой открытый ключ хоста (host key). Клиент не имеет независимого способа проверить, тот ли это сервер, к которому вы хотели подключиться, поэтому выводит отпечаток ключа и перекладывает решение на человека. Фраза «The authenticity of host '…' can't be established» буквально означает: подлинность хоста не может быть установлена автоматически.
Если вы отвечаете yes, ключ записывается в файл ~/.ssh/known_hosts. При всех последующих подключениях клиент молча сверяет ключ сервера с сохранённым — и вопрос больше не задаётся. Если же ключ сервера внезапно изменится, SSH выдаст уже гораздо более тревожное предупреждение о несовпадении.
Сообщение про fingerprint — это не ошибка, а запрос доверия. Отвечая yes, вы навсегда привязываете ключ сервера к его адресу в known_hosts.
Что такое ED25519 и почему именно этот алгоритм
ED25519 — современный алгоритм цифровой подписи на эллиптических кривых (Edwards-curve Digital Signature Algorithm, кривая Curve25519). Он пришёл на смену старым типам хост-ключей и сегодня используется OpenSSH как один из основных. Сервер может иметь сразу несколько хост-ключей разных типов, а клиент и сервер договариваются, какой из них использовать.
- 🔑 ED25519 — короткие ключи, быстрая проверка подписи, считается наиболее предпочтительным современным вариантом.
- 🔐 RSA — классический алгоритм, ключи заметно длиннее, поддерживается практически везде.
- 📐 ECDSA — подписи на кривых NIST; ранее был популярен, сейчас часто уступает место ED25519.
- 🗄️ DSA — устаревший алгоритм, в современных версиях OpenSSH отключён.
То, какой именно fingerprint вы видите, зависит от того, какие хост-ключи сгенерированы на сервере и какие алгоритмы разрешены у клиента. Увидеть вместо ED25519 строку про RSA или ECDSA — нормально: смысл процедуры от этого не меняется.
Как правильно проверить отпечаток перед ответом yes
Корректная процедура выглядит так: отпечаток нужно сверить со значением, полученным по независимому каналу. Если у вас есть доступ к консоли самого сервера (через панель хостинг-провайдера, IPMI, VNC или физически), отпечаток хост-ключа можно посмотреть командой:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
Вывод этой команды должен символ в символ совпасть с тем, что показывает SSH-клиент. Путь к файлу ключа может отличаться в зависимости от ОС и конфигурации — точное расположение стоит уточнить в документации вашего дистрибутива.
Если независимого канала нет — например, сервер выдал провайдер без указания отпечатка — решение остаётся за вами. Для домашних лабораторных стендов в изолированной сети риск при первом подключении невелик, но для публичных серверов с важными данными слепое yes означает, что вы потенциально доверяете ключу, подставленному перехватчиком.
⚠️ Внимание: если вы подключаетесь к серверу не в первый раз, а SSH вдруг снова показывает fingerprint и спрашивает подтверждение — это повод остановиться. Такое бывает после переустановки ОС на сервере или смены его ключей, но также может указывать на подмену хоста в сети.
Что означает SHA256-строка в отпечатке
Длинная последовательность после SHA256: — это хеш открытого ключа сервера, закодированный в Base64. Сам ключ целиком показывать неудобно (он длинный), поэтому клиент выводит компактный хеш-отпечаток: его проще сравнивать глазами или диктовать по телефону. Даже малейшее изменение ключа полностью меняет хеш, поэтому совпадение отпечатка практически гарантирует совпадение ключа.
Раньше OpenSSH по умолчанию показывал отпечатки в формате MD5 (шестнадцатеричные пары через двоеточие), в современных версиях стандартом стал SHA256. Некоторые хостинг-панели до сих пор публикуют MD5-отпечатки — в этом случае нужно либо попросить провайдера дать SHA256, либо получить MD5-версию на стороне сервера соответствующей опцией ssh-keygen.
Типичные сценарии и что делать в каждом
Одно и то же сообщение встречается в разных ситуациях, и реакция должна отличаться. Сводная таблица поможет быстро сориентироваться:
| Сценарий | Что происходит | Правильное действие |
|---|---|---|
| Первое подключение к новому серверу | Ключ хоста неизвестен клиенту | Сверить fingerprint по независимому каналу, затем yes |
| Переустановка ОС на сервере | Клиент видит новый ключ, старый в known_hosts | Подтвердить у администратора, удалить старую запись, принять новую |
| Предупреждение REMOTE HOST IDENTIFICATION HAS CHANGED | Ключ сервера не совпадает с сохранённым | Не подключаться, пока причина смены ключа не подтверждена |
| Подключение по IP вместо имени хоста | Для этого IP записи в known_hosts нет | Нормально: сверить ключ и принять, запись создастся для IP |
Отдельно стоит сказать про ситуацию, когда один и тот же IP-адрес переиспользуется: например, облачный провайдер выдал вам адрес, который раньше принадлежал чужому серверу, а в вашем known_hosts осталась старая запись. Тогда SSH сообщит о конфликте ключа — и это ложная тревога, но разбираться с ней нужно осознанно, а не удалением записей наугад.
Чтобы удалить устаревшую запись о хосте, используйте ssh-keygen -R имя_или_IP — это безопаснее, чем ручная правка known_hosts, так как команда корректно обрабатывает и хешированные записи.
Как убрать вопрос автоматически — и почему это рискованно
В скриптах и CI/CD-пайплайнах интерактивный вопрос мешает, поэтому существуют способы его обойти. Самый грубый — опция StrictHostKeyChecking no вместе с перенаправлением known_hosts в /dev/null. Она отключает проверку ключа полностью: клиент будет доверять любому серверу. Такой приём допустим разве что для эфемерных тестовых окружений в изолированной сети — в боевых системах он открывает дорогу MITM-атакам.
Безопасная альтернатива — заранее наполнить known_hosts доверенными ключами. Для этого ключ сканируют с сервера по доверенному каналу с помощью ssh-keyscan и добавляют в файл до первого подключения, либо распространяют готовый known_hosts через систему управления конфигурациями. Тогда интерактивный вопрос не возникает, а защита сохраняется.
⚠️ Внимание: запуск ssh-keyscan по незащищённой сети сам по себе уязвим к подмене — полученные ключи нужно сверять с эталоном или получать в момент, когда подмена исключена (например, при инициализации сервера через cloud-init).
Частые ошибки при работе с fingerprint
- 🙈 Слепое
yesна любом сервере — привычка, обнуляющая защиту от перехвата соединения. - 🗑️ Удаление всего файла
known_hostsпри одном конфликте — теряются записи обо всех доверенных хостах. - 🔁 Игнорирование предупреждения о смене ключа после «переустановки», о которой никто не предупреждал.
- 📋 Сравнение отпечатков разных типов: SHA256 клиента с MD5 из панели хостера совпасть не могут.
Почему SSH вообще не проверяет ключ сам
В отличие от HTTPS, где подлинность сайтов подтверждают центры сертификации, в SSH нет встроенной глобальной инфраструктуры доверия. Доверие строится по модели TOFU (Trust On First Use): первый ключ принимает человек, а дальше клиент контролирует, чтобы он не менялся. Существуют и централизованные варианты — SSH-сертификаты и записи SSHFP в DNS с DNSSEC, но они требуют отдельной настройки инфраструктуры.
FAQ: частые вопросы про fingerprint ED25519
Это вирус или взлом, если появилось сообщение про fingerprint?
Нет. При первом подключении к новому серверу это штатное поведение SSH. Насторожить должно лишь повторное появление вопроса к серверу, к которому вы уже подключались, или предупреждение о смене ключа без видимой причины.
Можно ли просто нажать yes, ничего не проверяя?
Технически — да, соединение установится. Но вы примете ключ без проверки, и если в этот момент трафик перехватывается, вы доверите ключ злоумышленника. Для личных серверов в домашней сети риск обычно невелик, для публичных — отпечаток стоит сверить.
Где хранится сохранённый ключ после ответа yes?
В файле ~/.ssh/known_hosts в домашнем каталоге пользователя. Каждая строка соответствует хосту или IP-адресу; записи могут быть хешированы, если включена соответствующая опция клиента.
Почему у одного сервера отпечаток ED25519, а у другого RSA?
Это зависит от того, какие хост-ключи сгенерированы на сервере и какие алгоритмы разрешены в конфигурации клиента и сервера. Современные установки OpenSSH по умолчанию создают ED25519-ключ, на старых системах может использоваться RSA или ECDSA.
Что делать, если SSH пишет REMOTE HOST IDENTIFICATION HAS CHANGED?
Не подключайтесь, пока не выясните причину. Уточните у администратора или провайдера, переустанавливалась ли ОС или менялись ли ключи. Если смена ключа подтверждена, удалите старую запись командой ssh-keygen -R хост и примите новый ключ после сверки отпечатка.
Отпечаток ED25519 — это «паспорт» сервера. Сверяйте его при первом подключении по независимому каналу, а любое неожиданное изменение ключа рассматривайте как сигнал проверить, что происходит с сервером.