Ostrzeżenie „Identyfikacja zdalnego hosta uległa zmianie” podczas łączenia przez SSH

21

Otrzymałem ten komunikat dzisiaj, gdy próbuję zalogować się na mój serwer. Co powinienem zrobić? Co się dzieje?

$ ssh 10.10.10.69
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
3d:1b:02:9e:b2:b8:f0:f7:c6:4f:94:96:f6:e3:c0:d1.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:8
RSA host key for 10.10.10.69 has changed and you have requested strict checking.Host key verification failed.
myusuf3
źródło
2
Na marginesie, możesz chcieć uniknąć lokalnego i zdalnego logowania jako root, a zamiast tego używać nieuprzywilejowanych użytkowników w połączeniu z sudo.
Steve Beattie

Odpowiedzi:

12

Czy ostatnio ponownie instalowałeś system operacyjny na swoim serwerze? To by to spowodowało.

Aby to naprawić: http://www.cyberciti.biz/faq/warning-remote-host-identification-has-changed-error-and-solution/

Rozwiązanie nr 1: Usuń klucze za pomocą ssh-keygen

Użyj -Ropcji, aby usunąć wszystkie klucze należące do nazwy hosta ze znanego pliku hosta. Ta opcja jest przydatna do usuwania mieszanych hostów. Jeśli Twoja zdalna nazwa hosta to server.example.com, wprowadź:

$ ssh-keygen -R {server.name.com}
$ ssh-keygen -R {ssh.server.ip.address}
$ ssh-keygen -R {ssh.server.ip.address} -f {/path/to/known_hosts}
$ ssh-keygen -R server.example.com

Teraz możesz bez problemu połączyć się z hostem.

Rozwiązanie nr 2: Dodaj poprawny klucz hosta /home/user/.ssh/known_hosts

Nie jest konieczne usuwanie całego pliku znanego_hosta, tylko linia obrażająca w tym pliku. Na przykład, jeśli masz 3 serwery w następujący sposób.

myserver1.com,64.2.5.111 ssh-rsa  
 AAAAB3NzaC1yc2EAAAABIwAAAIEA11FV0EnGahT2EK8qElocjuHTsu1jaCfxkyIgBTlxlrOIRchb2pw8IzJLOs2bcuYYfa8nSXGEcWyaFD1ifUjfHelj94AAAAB3NzaC1yc2EAAAABIwAAAIEA11FV0E
nGahT2EK8qElocjuHTsu1jaCfxkyIgBTlxlrOIRchb2pw8IzJLOs2bcuYYfa8nSXGEcWyaFD1ifUjfHelj94H+uv304/ZDz6xZb9ZWsdm+264qReImZzruAKxnwTo4dcHkgKXKHeefnBKyEvvp/2ExMV9WT5DVe1viVw
    k=
    myserver2.com,125.1.12.5 ssh-rsa
 AAAAB3NzaC1yc2EAAAABIwAAAQEAtDiERucsZzJGx/1kUNIOYhJbczbZHN2Z1gCnTjvO/0mO2R6KiQUP4hOdLppIUc9GNvlp1kGc3w7B9tREH6kghXFiBjrIn6VzUO4uwrnsMbnAnscD5EktgI7fG4ZcNUP 5+J7sa3o+rtmOuiFxCA690DXUJ8nX8yDHaJfzMUTKTGxQz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/IyI4NxHhhpltYZKW/Qz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/M7L0vKeTObue1SgAsXADtK3162a/Z6MGnAazIviHBldxtGrFwvEnk82+GznkO3IBZt5vOK2heBnqQBf
    w=
    myserver3.com,125.2.1.15 ssh-rsa 
 5+J7sa3o+rtmOuiFxCA690DXUJ8nX8yDHaJfzMUTKTGx0lVkphVsvYD5hJzm0eKHv+oUXRT9v+QMIL+um/IyI4NxHhhpltYZKW
 as3533dka//sd33433////44632Z6MGnAazIviHBldxtGrFwvEnk82/Qz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/M7L0vKeTObue1SgAsXADtK3162a/Z6MGnAazIviHBldxtGrFwvEnk82+GznkO3IBZt5vOK2heBnqQBfw==

Aby usunąć drugi serwer (myserver.com), otwórz plik:

# vi +2 .ssh/known_hosts

I naciśnij polecenie dd, aby usunąć linię. Zapisz i zamknij plik. Lub użyj następujących

$ vi ~/.ssh/known_hosts

Teraz przejdź do wiersza # 2, wpisz następujące polecenie

:2

Teraz usuń wiersz za pomocą dd i zakończ:

dd
:wq

Lub możesz użyć polecenia sed w następujący sposób, aby usunąć obrażający klucz w linii nr 44:

$ sed -i 44d ~/.ssh/known_hosts

Rozwiązanie 3: Po prostu usuń plik znane_hosty Jeśli masz tylko jeden serwer ssh

$ cd
$ rm .ssh/known_hosts
$ ssh ras.mydomain.com

Spróbuj ponownie połączyć się z ssh
Teraz powinieneś być w stanie połączyć się z serwerem przez ssh:

ssh username@server-ip-here
ssh [email protected]

Następnie pojawi się nowy monit o dodanie klucza ~/.ssh/known_hostsw następujący sposób:

The authenticity of host '10.86.115.66 ()' can't be established.
ECDSA key fingerprint is 4e:10:42:39:53:85:7f:89:89:dc:89:84:8d:79:e7:ed.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.86.115.66' (ECDSA) to the list of known hosts.
Izajasza
źródło
9
Zauważ, że jeśli nie zmieni klucze hostów SSH Twojego serwera, należy nie zastąpi kopię klucza hosta, ponieważ może to być znak, że ktoś próbuje obalić komunikację poprzez przeprowadzenie ataku typu man-in-the-middle.
Kees Cook
7

Z tego, co mogę powiedzieć, wszystkie te odpowiedzi dotyczą tłumienia ostrzeżenia zamiast radzenia sobie z nim. Krótko mówiąc, ostrzeżenie mówi, że serwer nie wygląda tak, jak kiedyś; zobacz https://en.wikipedia.org/wiki/Man_in_the_middle_attack, aby dowiedzieć się, dlaczego może to być niebezpieczne.

Przeczytaj man ssh, szczególnie ten rozdział:

WERYFIKACJA KLUCZE GOSPODARCZYCH

Podczas pierwszego połączenia z serwerem użytkownik otrzymuje odcisk palca klucza publicznego serwera (chyba że opcja StrictHostKeyChecking została wyłączona). Odciski palców można określić za pomocą ssh-keygen (1) :

   $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

Aby być bezpiecznym, ty (lub ktoś, komu ufasz) powinieneś najpierw uruchomić to polecenie na serwerze, z którym się łączysz. Otrzymasz odcisk palca podobny do podanego w ostrzeżeniu w pytaniu. Oczywiście często nie masz tych informacji, ale jeśli masz powód, by podejrzewać, że coś jest nie tak, uruchomienie tego polecenia jest sposobem sprawdzenia, czy podpis serwera naprawdę się zmienił, czy może dzieje się coś podejrzanego.

młot
źródło
1
Użyj tego, jeśli Twój host udostępnia odcisk palca sha256 zamiast skrótu md5. ssh -o FingerprintHash=md5 example.org
Declan McKenna,
1
Więcej na temat FingerprintHash: superuser.com/questions/929566/... (tj. Powinno być preferowane sha256, ale możesz nie znać tej wartości, jeśli nie zaktualizowałeś wystarczająco niedawno)
odblokuj
2

Napotkałem ten sam problem i jeśli nie chcesz usunąć całego known_hostspliku, możesz wykonać następujące polecenie:

ssh-keygen -R 10.10.10.69

Nie ma problemu z usunięciem znanych hostów. Musisz tylko dodać każdy serwer, z którym się łączysz, do listy za każdym razem, gdy się z nimi łączysz. Możliwe, że zepsują również twoje skrypty, ponieważ hosty nie są jeszcze zaufane. Alarm pojawia się, gdy podpis hosta (komputer, z którym próbujesz się połączyć, aby wygenerować nowe klucze, zwykle z powodu ponownej instalacji lub rotacji kluczy).

theTuxRacer
źródło
0

Jeśli uważasz, że to ostrzeżenie jest fałszywie pozytywne, możesz usunąć swoje / root / ssh / znane_hosty, aby rozpocząć nowe weryfikacje.

Ta Coen
źródło
3
Nie rób tego, stracisz innych znanych gospodarzy. Zamiast tego, jeśli masz pewność, że jest to wynik fałszywie dodatni, usuń konkretną linię: „znane_hosty: 8” w tym przypadku wiersz 8.
Roger Light
0

Jeśli niedawno ponownie zainstalowałeś serwer lub w inny sposób zmieniłeś klucz hosta, prawdopodobnie bezpiecznie jest usunąć wiersz 8 z pliku ~ / .ssh / known_hosts i ponownie dodać serwer (przez ssh'ing do niego i odpowiedź „tak „gdy poprosi o weryfikację klucza)

elzapp
źródło
0

Ponieważ twój serwer jest w sieci lokalnej, możesz być całkiem pewny siebie.

Jeśli przeinstalowałeś system, jest to normalne, ale zamiast usunąć plik znany_host, zalecam zrobienie tego echo "" > ~/.ssh/known_hosts

Popinou
źródło
Ludzie nadal mogą grać w sztuczki w sieci lokalnej. Sieci biznesowe lub szkolne mogą mieć dużo miejsca na brak zaufania.
Azendale,
0

Skopiuj ten wiersz, ale wpisz nazwę użytkownika i nazwę hosta / IP dla useri remote-server:

ssh-keygen -f "/home/user/.ssh/known_hosts" -R remote-server

Na przykład:

ssh-keygen -f "/home/dev1/.ssh/known_hosts" -R 192.168.199.108

I wklej go na lokalnym terminalu i uruchom. To zadziałało dla mnie.

dheerendra
źródło
0

W węźle klienta, w którym wydajesz ssh,

vi ~/.ssh/known_hosts

Usuń wszystkie linie zaczynające się od adresów IP, które są w tej samej sieci, co adres IP, do którego próbujesz ssh. Zmusi to węzeł klienta do trwałego dodania (ECDSA) do listy znanych hostów.

Anthony Awuley
źródło