Pereiti prie pagrindinio turinio

Kaip ištaisyti "Warning: Remote Host Identification Has Changed" klaidą

Atnaujinta šiandien

Panašiai kaip SSL (Secure Sockets Layer), SSH ryšys autentifikacijai taip pat naudoja specialius raktus. Kai prie serverio jungiatės per Secure Shell (SSH), sistemai perduodamas ECDSA rakto unikalus identifikatorius. Jis išsaugomas jūsų kompiuteryje ir naudojamas kitą kartą, kai bandote užmegzti tokį ryšį su savo serveriu. Tai padeda užtikrinti, kad ryšys tarp jūsų kompiuterio ir serverio būtų saugus.

Jei SSH klientas nustato, kad šie identifikatoriai skiriasi nuo tų, kuriuos jis laiko teisingais, prisijungimo metu pateikiama klaida "Warning: Remote host identification has changed":

Klaidos pranešime nurodomas known_hosts failas. Tai yra kompiuteriui žinomų nuotolinių SSH serverių sąrašas. Šis failas naudojamas kaip atskaitos failas autentifikacijos procese.

Jungiantis prie serverio pirmą kartą, turėtumėte gauti patvirtinimo pranešimą su klausimu, ar tikrai norite prisijungti. Jei sutinkate, ECDSA rakto unikalus identifikatorius išsaugomas minėtame faile.

Tačiau pasitaiko situacijų, kai nuo paskutinio prisijungimo serverio ECDSA raktas pasikeičia. Tai gali reikšti, kad, patys to nežinodami, jungiatės prie kito serverio. Jei tas naujas serveris yra kenkėjiškas, jis gali matyti visus jūsų siunčiamus ir gaunamus duomenis. Tokia ataka vadinama "man-in-the-middle".

Vis dėlto taip būna ne visada. Serverio ECDSA rakto unikalus identifikatorius gali pasikeisti dėl įvairių priežasčių, pavyzdžiui:

  • operacinės sistemos perinstaliavimo;

  • pasikeitusio serverio IP adreso, kai konfigūracijoje naudojate "CheckHostIP yes";

  • kai prie to paties serverio jungiatės naudodami kitą serverio vardą.

Priežasčių gali būti ir daugiau, tačiau jei klaida atsirado po vieno iš minėtų serverio pakeitimų ir esate tikri, kad būtent tai ją sukėlė, problemą galite išspręsti vadovaudamiesi toliau pateiktomis rekomendacijomis.

Linux ir macOS

Paprasčiausias sprendimas tokiose sistemose yra naudoti ssh-keygen įrankį ir pašalinti netinkamą raktą iš known_hosts failo. Tai galima padaryti šia komanda:

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

Kaip minėta, ECDSA rakto unikalūs identifikatoriai saugomi known_hosts faile. Klaidos pranešime taip pat bus nurodyta konkreti šio failo eilutė.

Būtent ten ir saugomas to serverio raktas, pavyzdžiui, aukščiau pateiktu atveju tai būtų penkta eilutė. Raktą galite pašalinti ir rankiniu būdu, atidarę failą pasirinktu teksto redaktoriumi:

nano /home/iv/.ssh/known_hosts

Taip pat įspėjime pateikiama ir visa komanda, kurią reikia įvykdyti, kad senasis raktas būtų pašalintas:

Aukščiau nurodytu atveju komanda būtų tokia:

ssh-keygen -f "/home/iv/.ssh/known_hosts" -R "[hostname-or-IP]"

Windows

Pagal numatytuosius nustatymus Windows nepalaiko SSH ryšių. Norint jį užmegzti, reikia naudoti SSH klientą.

PuTTY

Jei naudojate PuTTY, matysite įspėjimą, tačiau turėsite galimybę tęsti prisijungimą:

Jei žinote, kodėl rakto duomenys nesutampa, spustelėkite Yes.

Kitas būdas pašalinti identifikatoriaus raktą naudojant PuTTY yra per registrą. Norėdami jį atidaryti, Windows paieškos juostoje įveskite programos pavadinimą Regedit.

Raskite šį kelią:

HKEY_CURRENT_USER/Software/SimonTatham/PuTTY/SshHostKeys/

Čia bus pateiktas jūsų kompiuteryje išsaugotų ryšių sąrašas. Reikia surasti tą įrašą, kuris kelia prisijungimo problemą, ir jį pašalinti.

OpenSSH

Jei Windows sistemoje kaip SSH klientą naudojate OpenSSH, raktą galite pašalinti atidarę .ssh aplanką. Norėdami rasti jo vietą, Windows paieškos juostoje įveskite %USERPROFILE%.

.ssh aplanke raskite ir atidarykite known_hosts failą.

Atidarykite failą ir ištrinkite raktą, dėl kurio kyla prisijungimo problema.

Ar gavote atsakymą į savo klausimą?