Проверьте отпечаток пальца для ключа ECDSA, отправленного удаленным хостом [закрыт]

24

Я получил известное предупреждающее сообщение при попытке ssh на сервер:

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

И я знаю почему, потому что я изменил ip такого сервера. Но если бы это было не так, как я мог проверить отпечаток пальца на ключ ECDSA, отправленный удаленным хостом?

Я пытался сделать это путем:

echo -n ipofthehost | sha256sum

Но я не получаю такой же отпечаток пальца. Я также пробовал "hostname, ip" вроде как в aws, но у меня не было совпадений.

Если я удаляю запись из моего файла known_hosts и пытаюсь снова выполнить ssh, он завершается успешно и сообщает следующее:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

Так к чему он применяет сумму sha256 для получения отпечатка пальца и как я могу это проверить?

gugol
источник
2
Без заведомо хорошего значения вы не сможете это проверить. Вы записываете его только при первом запуске SSHd и генерации ключей, и сравниваете это известное правильное значение.
Я редактировал твой вопрос. Этот сайт принимает только вопросы о профессиональной деловой среде. Вопросы по домашним сетям здесь неординарные, я попытался сохранить ваш вопрос в моем редактировании. В настоящее время идет голосование против вашего вопроса, чтобы закрыть его на этом основании.
Петер говорит восстановить Монику
@ user186340 Кажется, правда, что «вы записываете его только при первом запуске SSHd». Если у вас есть доступ к машине с SSHd, вы можете /etc/ssh/ssh_host_ecdsa_key.pubполучить отпечаток пальца. Я только что сделал.
Джамадагни

Ответы:

12

Отпечаток открытого ключа - это не простой хэш IP-строки.

Чтобы получить открытый ключ удаленного хоста, вы можете ssh-keyscan <IP>использовать обычные инструменты для извлечения его отпечатка пальца ( ssh-keygen -lf <public_key_file>).

Наконец, вы можете сравнить с текущим отпечатком в вашем known_hostsфайле с ssh-keygen -l -F <domain_or_ip>.

Ксавье Лукас
источник
2
Я запутался, почему при подключении через SSH и принудительном вводе ключа ecdsa в первый раз ( ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' william@my.server) он дает мне 43-значный буквенно-цифровой отпечаток пальца ( ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.), а когда я запускаю, ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pubя получаю 32 -значный шестнадцатеричный код ??
Уильям Туррелл
1
@WilliamTurrell Это происходит из-за того, что ваш сервер должен иметь более старую (вероятно, pre-openSSH 6.8) версию ssh-keygen(или ваш сервер-провайдер не поспевает за временем и по-прежнему предоставляет только хэши md5 вместо нового SHA256). Здесь перечислены обходные пути: superuser.com/questions/929566
SeldomNeedy
9

Немного подробнее : поскольку в предупреждающем сообщении указывается отпечаток ключа ECDSA, отправленный удаленным хостом, мы собираем информацию об открытом (ecdsa) ключе хоста:

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

Затем мы можем узнать, где в нашем файле known_hosts этот открытый (ecdsa) ключ:

ssh-keygen -l -F ipofhost

Если мы хотим сравнить отпечатки пальцев, мы должны поместить содержимое нашего файла 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, новую свежую запись для он будет добавлен в такой файл.

gugol
источник