Как исправить: «ВНИМАНИЕ: ИДЕНТИФИКАЦИЯ УДАЛЕННОГО ХОСТА ИЗМЕНИЛАСЬ» на Mac и Linux

SSH или Secure Shell - очень распространенный способ безопасного доступа к удаленным машинам, обычно через командную строку. Он направлен на то, чтобы ваше соединение и, следовательно, все передаваемые данные были свободны от подслушивания. Из-за этого в популярные клиенты SSH, такие как OpenSSH [https://en.wikipedia.org/wiki/OpenSSH], встроено довольно много проверок, которые гарантируют, что ваше соединение не будет скомпрометировано. Ниже приведен пример одной из этих проверок, которая определяет, когда отпечаток пальца

SSH или Secure Shell - очень распространенный способ безопасного доступа к удаленным машинам, обычно через командную строку. Он направлен на то, чтобы ваше соединение и, следовательно, все передаваемые данные были свободны от подслушивания. Из-за этого в популярные клиенты SSH, такие как OpenSSH , встроено немало проверок, которые гарантируют, что ваше соединение не будет скомпрометировано.

Примером одной из этих проверок является следующий, который определяет, когда был изменен отпечаток пальца сервера:

 $ ssh [email protected] 
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
 @ 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:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I. 
 Please contact your system administrator. 
 Add correct host key in /Users/scott/.ssh/known_hosts to get rid of this message. 
 Offending ECDSA key in /Users/scott/.ssh/known_hosts:47 
 ECDSA host key for ec2-192-168-1-1.compute-1.amazonaws.com has changed and you have requested strict checking. 
 Host key verification failed. 

Когда вы подключаетесь к серверу через SSH, он получает отпечаток ключа ECDSA , который затем сохраняет в вашем домашнем каталоге в ~/.ssh/known_hosts . Это делается после первого подключения к серверу, и вам будет предложено следующее сообщение:

 $ ssh [email protected] 
 The authenticity of host 'ec2-192-168-1-1.compute-1.amazonaws.com (192.168.1.1)' can't be established. 
 ECDSA key fingerprint is SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I. 
 Are you sure you want to continue connecting (yes/no)? 

Если вы введете «да», то отпечаток пальца будет сохранен в known_hosts , который SSH затем проверяет каждый раз, когда вы подключаетесь к этому серверу.

Но что произойдет, если ключ ECDSA сервера изменился с момента вашего последнего подключения к нему? Это настораживает, потому что на самом деле это может означать, что вы подключаетесь к другому серверу, не зная об этом. Если этот новый сервер является вредоносным, он сможет просматривать все данные, отправляемые в ваше соединение и из него, которые могут быть использованы любым, кто настраивал сервер. Это называется атакой «человек посередине» . Этот сценарий в точности соответствует сообщению «ПРЕДУПРЕЖДЕНИЕ: ИДЕНТИФИКАЦИЯ УДАЛЕННОГО ХОЗЯКА ИЗМЕНИЛАСЬ!» сообщение пытается вас предупредить.

Конечно, это не всегда так, и есть много причин для изменения отпечатка ключа ECDSA для сервера. В моем случае у меня был эластичный IP-адрес на AWS, и я назначил его другому серверу после повторного развертывания нашего приложения. IP-адрес и имя хоста, к которым я подключался, были одинаковыми, но базовый сервер был другим, что и заставило SSH-клиент выдать это предупреждение.

Устранение проблемы

Если вы на 100% уверены, что это ожидаемое поведение и что нет потенциальной проблемы с безопасностью, вам необходимо исправить проблему, прежде чем продолжить.

Я нашел два самых простых способа решить эту проблему.

Разрешить вручную через known_hosts

  • В предупреждающем сообщении найдите строку, которая сообщает вам, где находится проблемный ключ ECDSA в файле known_hosts В моем примере в этой строке говорилось «Нарушение ключа ECDSA в /Users/scott/.ssh/known_hosts:47», что относится к строке 47.
  • Откройте known_hosts указанный в предупреждающем сообщении.
  • Удалить строку, указанную в предупреждающем сообщении

Удалив эту строку, у вашего SSH-клиента не будет отпечатка ключа ECDSA для сравнения, и он снова попросит вас проверить подлинность сервера при следующем подключении. После этого у вас будет новый отпечаток в нашем known_hosts для этого сервера, и предупреждение исчезнет.

Разрешить с помощью ssh-keygen

Другое решение - использовать утилиту ssh-keygen known_hosts ключа из вашего файла known_hosts, что можно сделать с помощью следующей команды:

 $ ssh-keygen -R [hostname-or-IP] 

Итак, в моем примере я бы использовал это так:

 $ ssh-keygen -R ec2-192-168-1-1.compute-1.amazonaws.com 

Этот метод хорош, если вы не хотите вручную изменять known_hosts , а утилиту проще использовать, если вам нужно исправить несколько имен хостов и IP-адресов. Он также может обрабатывать хешированные known_hosts.old хостов в файле known_hosts.old.

comments powered by Disqus