Я получаю известное предупреждающее сообщение при попытке 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)?
Итак, для чего применяется sha256sum для получения отпечатка пальца и как я могу его проверить?
Отпечаток открытого ключа - это не простой хэш строки IP-адреса.
Чтобы получить открытый ключ удаленного хоста, вы можете использовать ssh-keyscan <IP address>
, а затем вы можете использовать обычные инструменты для извлечения его отпечатка (ssh-keygen -lf <public_key_file>
).
Наконец, вы можете сравнить текущий отпечаток пальца на вашем known_hosts
файл с ssh-keygen -l -F <domain_or_IP_address>
.
Чуть подробнее: Поскольку предупреждающее сообщение относится к отпечатку пальца ECDSA key, отправленный удаленным хостом, мы собираем информацию об открытом (ECDSA) ключе хоста:
ssh-keyscan -t ecdsa <IP_address_or_hostname> 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
в него, в такой файл будет добавлена новая свежая запись для него.