Вопрос или проблема
Я получил хорошо известное предупреждение, когда пытался ssh
на сервер:
$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: IDENTIFIKATSIYA UDALYENNOGO HOSTA IZMENILAS'! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ВОЗМОЖНО, КТО-ТО ДЕЛАЕТ ЧТО-ТО ПОДЛОЕ!
Кто-то может подслушивать вас прямо сейчас (атака «человек посередине»)!
Также возможно, что ключ хоста только что изменился.
Отпечаток ключа ECDSA, отправленного удаленным хостом, является
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Пожалуйста, свяжитесь с вашим системным администратором.
Добавьте корректный ключ хоста в /home/user/.ssh/known_hosts, чтобы избавиться от этого сообщения.
Неправильный ключ ECDSA в /home/user/.ssh/known_hosts:10
Ключ хоста ECDSA для ipofmyhost изменился, и вы запросили строгую проверку.
Проверка ключа хоста не удалась.
И я знаю, почему, потому что я изменил ip этого сервера. Но если бы этого не произошло, как я мог бы проверить отпечаток ключа ECDSA, отправленного удаленным хостом?
Я попытался сделать это, выполнив:
echo -n ipofthehost | sha256sum
Но я не получаю такой же отпечаток. Я также пробовал “hostname,ip” как в AWS, но не получил совпадения.
Если я удалю запись из моего файла known_hosts и снова попробую ssh
, это успешно срабатывает и сообщает следующее:
Отпечаток ключа ECDSA: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Вы уверены, что хотите продолжить подключение (да/нет)?
Так к чему применяется sha256sum для получения отпечатка и как я мог бы его проверить?
Отпечаток публичного ключа не является простым хешем строки IP-адреса.
Чтобы получить публичный ключ удаленного хоста, вы можете использовать ssh-keyscan <IP адрес>
, а затем вы можете использовать обычные инструменты для извлечения его отпечатка (ssh-keygen -lf <файл_публикационного_ключа>
).
В конце концов, вы можете сравнить текущий отпечаток в вашем файле known_hosts
с ssh-keygen -l -F <домен_или_IP-адрес>
.
Чуть подробнее: Поскольку предупреждающее сообщение относится к отпечатку для ECDSA ключа, отправленного удаленным хостом, мы собираем информацию о публичном (ECDSA) ключе хоста:
ssh-keyscan -t ecdsa IP_address_or_hostname > ecdsa_file_to_compare
Затем мы можем выяснить, где в нашем known_hosts файле находится публичный (ECDSA) ключ:
ssh-keygen -F IP_address_or_hostname > ecdsa_file_from_known_hosts
Если мы хотим сравнить отпечатки, мы должны вставить содержимое нашего known_hosts файла (только запись, относящуюся к этому хосту). Мы можем назвать это ecdsa_file_from_known_hosts и затем сравнить их следующим образом:
ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts
И проверить, показывают ли они один и тот же хеш.
Конечно, они не совпадают, и поэтому я получил предупреждающее сообщение (ssh
проверяет это совпадение внутренне). Если мы уверены в изменении IP-адреса (так что мы не страдаем от атаки “человек посередине”), мы можем просто удалить запись этого хоста в нашем known_hosts файле, и в следующий раз, когда мы ssh
на него, новая запись для него будет добавлена в такой файл.
Ответ или решение
Когда вы пытаетесь подключиться к серверу через SSH и получаете предупреждение о том, что "идентификация удаленного хоста изменилась", это может быть связано с тем, что либо сам ключ хоста изменился, либо произошло возможное вмешательство (например, атака "человек посередине"). Тем не менее, в вашей ситуации вы знаете, что IP-адрес сервера изменился.
Чтобы проверить отпечаток ECDSA-ключа, отправленного удаленным хостом, выполните следующие шаги:
-
Сканирование ключей хоста: Используйте команду
ssh-keyscan
, чтобы получить публичный ключ ECDSA удаленного хоста. ЗаменитеIP_address_or_hostname
на фактический IP-адрес или имя хоста:ssh-keyscan -t ecdsa IP_address_or_hostname > ecdsa_file_to_compare
-
Получение ключа из файла known_hosts: Сравните полученный ключ с тем, что у вас уже записано в файле
known_hosts
. Для этого используйте следующую команду, чтобы извлечь существующий ключ:ssh-keygen -F IP_address_or_hostname > ecdsa_file_from_known_hosts
-
Получение отпечатков: Теперь вы можете получить отпечатки для обоих файлов, чтобы проверить, совпадают ли они:
ssh-keygen -lf ecdsa_file_to_compare ssh-keygen -lf ecdsa_file_from_known_hosts
-
Сравнение отпечатков: Проверьте вывод команды. Если отпечатки не совпадают, это означает, что ключи различаются, и предупреждение о изменении идентификации хоста действительно имеет место.
Если вы уверены, что только IP-адрес сервера изменился и вы не подвержены атаке "человек посередине", вы можете удалить старую запись из файла known_hosts
. После этого, когда вы снова попытаетесь подключиться к серверу по SSH, новая запись будет автоматически добавлена в ваш файл known_hosts
.
Помимо вышеперечисленных шагов, важно следить за безопасностью ваших соединений и удостовериться, что изменения ключей были вызваны законными причинами, такими как изменения конфигурации сервера, а не потенциальными угрозами безопасности.