Tartalom
Bevezető
Amikor SSH hozzáférést használunk, a kapcsolódáskor számítógépünk (kliens) minden alkalommal lekéri a kiszolgáló ECDSA (Elliptic Curve Digital Signature Algorithm) ujjlenyomatát, amit az első csatlakozás során el is tárol az ismert kiszolgálók listájában (alapértelmezetten a ~/.ssh/known_hosts fájlban). Innentől kezdve a jövőbeli ssh csatlakozásokkor gépünk felismeri a távoli gép ECDSA ujjlenyomatát, ezzel ellenőrizve, hogy később is pontosan ugyanahhoz a géphez csatlakozunk-e. Amennyiben a későbbi csatlakozás során nem egyezik a frissen lekért ujjlenyomat a korábban eltárolt változattal, az ssh program a következő hibát dobja: "WARNING: POSSIBLE DNS SPOOFING DETECTED!" valamint "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!". Ezekkel a hibaüzenetekkel figyelmeztet bennünket, hogy felmerült a lehetősége annak, hogy DNS hamisítás (DNS spoofing) áldozatai lehetünk, vagy csak megváltozott a kiszolgáló ECDSA ujjlenyomata, azaz az SSH kiszolgáló nyilvános kulcsa.
Amennyiben egy - korábbról már ismert - publikus IP-címmel rendelkező, éles szerverhez történő csatlakozás során kapunk ilyen hibaüzenetet, valóban fennáll a veszélye egy "man-in-the-middle" típusú támadásnak (közbeékelődéses támadás), amikor a kiszolgáló vagy a kliens másnak adja ki magát, így hallgatva le a csatornát. Ebben az esetben lépjünk kapcsolatba a kiszolgáló üzemeltetőjével.
Ha viszont helyi hálózaton kísérletezgetünk több Linux kiszolgálóval amiknek változnak az IP-címei, ebben az esetben egy egyszerű lépéssel orvosolhatjuk a hibát. Ebben a rövid hibaelhárítóban erre az esetre találunk megoldást.
A hibajelenség
Egy helyi hálózaton lévő SSH kiszolgálóhoz történő csatlakozáskor az ssh parancs az a következő hibát dobja:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: POSSIBLE DNS SPOOFING DETECTED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ The ECDSA host key for debian11 has changed, and the key for the corresponding IP address 192.168.1.140 is unchanged. This could either mean that DNS SPOOFING is happening or the IP address for the host and its host key have changed at the same time. Offending key for IP in /home/botond/.ssh/known_hosts:30 remove with: ssh-keygen -f "/home/botond/.ssh/known_hosts" -R "192.168.1.140" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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:Vxt8eL9wH5B8hdoKscrLgujeCv3T4oR6xlhcEQbbr+k. Please contact your system administrator. Add correct host key in /home/botond/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/botond/.ssh/known_hosts:31 remove with: ssh-keygen -f "/home/botond/.ssh/known_hosts" -R "debian11" ECDSA host key for debian11 has changed and you have requested strict checking. Host key verification failed.
A hiba oka
A hibát ebben az esetben nálam az okozta, hogy a virtuális gépeimet szériánként ugyanarra az IP-címre állítom a helyi hálózatomban, hogy könnyebben megjegyezhessem a címeket. Ezért ha egyiket a másik után használom, és lépek fel rájuk SSH-n keresztül, akkor a másik gépről másik ECDSA ujjlenyomatot fog lekérni ugyanannál az IP-címnél az ssh, ezért a belépés helyett kiadja a "WARNING: POSSIBLE DNS SPOOFING DETECTED!" hibaüzenetet, valamint hogy a ~/.ssh/known_hosts fájlom hányadik sorában van a "hamis" ujjlenyomat. Majd alatta megjelenik a "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" felirat is, jelezvén hogy az IP-címhez tartozó ujjlenyomat megváltozott. Ami így is történt, mivel korábban másik virtuális gépet futtattam ugyanezen az IP-címen, így tehát semmi gond, csak rendbe kell raknunk a ~/.ssh/known_hosts fájlunkat.
A megoldás
Ennek a hibának a megoldása benne is van magában a hibaüzenetben, amelyben írja, hogy az ssh-keygen parancs segítségével töröljük a nem megfelelő sort a known_hosts fájlunkból. Ebben a példában tehát:
ssh-keygen -f /home/botond/.ssh/known_hosts -R debian11
Természetesen a saját home könyvtárunkban lévőt futtassuk. Általánosabban használva a parancsot tehát:
ssh-keygen -f ~/.ssh/known_hosts -R debian11
Ahol a kapcsolók az alábbiak:
- -f: a kulcsokat tartalmazó fájlnevet kell itt megadni
- -R: Eltávolít minden kulcsot a fájlból, ami a megadott hosztnévhez tartozik.
A parancs futtatása után kiírja, hogy hányadik sorban találta meg a hibás kulcsot, amit törölt is, a fájlból, és hogy hova mentette a biztonsági másolatot, amit előtte készített.
Ezután lépjünk be újra a kiszolgálóra:
Mivel már nem tárol a fájlunk semmit erről a kiszolgálóról, ezért első belépésnek tekinti, és rákérdez, hogy rendben van-e a kiszolgáló, és hogy folytatjuk-e a csatlakozást. Itt válaszoljunk "yes" -el, majd ezután már be is léptet bennünket:
A továbbiakban már nem fogja többet kérdezni ezt, ameddig nem változik meg az IP-címhez tartozó ujjlenyomat.
Kilépve a kiszolgálóról, érdekességképpen ellenőrizhetjük a saját gépen a kulcsot az ssh-keyscan paranccsal:
ssh-keyscan -t ecdsa <hosztnév>
Majd erre rá is kereshetünk a known_hosts fájlunkban:
grep -n "<kulcs>" ~/.ssh/known_hosts
Itt 2-szer is benne van a fájlban, az egyik a hosztnévhez társítva került bele, a másik pedig az IP-címhez.
Konklúzió
Ha tehát ssh belépéskor ilyen hibaüzenetet kapunk, győződjünk meg róla, hogy "házon belül" van-e a keveredés a belső IP-címeinkkel, mert akkor a fenti módon egyszerűen törölhetjük a hibás ECDSA ujjlenyomatot, de ha egy éles szerverre történő belépés során kapjuk ugyanezt, akkor legyünk óvatosak, mert csak úgy nem változnak meg a kiszolgálók nyilvános SSH kulcsai, tehát ebben az esetben érdeklődjünk a kiszolgálót üzemeltető rendszergazdától.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 80 megtekintés