Sprawdź odcisk palca dla klucza ECDSA wysłanego przez hosta zdalnego [zamknięte]

24

Otrzymuję dobrze znany komunikat ostrzegawczy podczas próby ssh na serwerze:

$ 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.

I wiem dlaczego, ponieważ zmieniłem adres IP takiego serwera. Ale gdyby tak nie było, jak mogę sprawdzić odcisk palca dla klucza ECDSA wysłanego przez zdalny host?

Próbowałem to zrobić przez:

echo -n ipofthehost | sha256sum

Ale nie dostaję tego samego odcisku palca. Próbowałem też „nazwa hosta, ip” jak w aws, ale nie dałem rady.

Jeśli usunę wejście z mojego pliku znane_hosty i spróbuję ponownie ssh, powiedzie się to i powie:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

Więc do czego to stosuje sha256sum, aby uzyskać odcisk palca i jak mogę to sprawdzić?

gugol
źródło
2
Bez znanej dobrej wartości nie można tego sprawdzić. Zapisujesz go tylko przy pierwszym uruchomieniu SSHd, a klucze są generowane i porównujesz z tą znaną dobrą wartością.
Zredagowałem twoje pytanie. Ta strona przyjmuje tylko pytania dotyczące profesjonalnego środowiska biznesowego. Pytania do sieci domowej są tutaj nie na temat, starałem się zapisać twoje pytanie w mojej edycji. Obecnie głosuje się przeciw Twojemu pytaniu, aby zamknąć to pytanie na tej podstawie.
Peter mówi, że przywróć Monikę
@ user186340 Wydaje się prawdą, że „zapisujesz to tylko przy pierwszym uruchomieniu SSHd”. Jeśli masz dostęp do komputera z SSHd, możesz zrobić, /etc/ssh/ssh_host_ecdsa_key.pubaby uzyskać odcisk palca. Właśnie zrobiłem.
jamadagni

Odpowiedzi:

12

Odcisk palca klucza publicznego nie jest zwykłym skrótem ciągu IP.

Aby pobrać klucz publiczny zdalnego hosta, którego możesz użyć, ssh-keyscan <IP>możesz użyć zwykłych narzędzi do wyodrębnienia jego odcisku palca ( ssh-keygen -lf <public_key_file>).

Wreszcie możesz porównać z bieżącym odciskiem palca w swoim known_hostspliku za pomocą ssh-keygen -l -F <domain_or_ip>.

Xavier Lucas
źródło
2
Jestem zdezorientowany, dlaczego podczas łączenia przez SSH i wymuszania klucza ecdsa po raz pierwszy ( ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' [email protected]) daje mi 43-cyfrowy alfanumeryczny odcisk palca ( ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.), ale kiedy uruchamiam, ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pubmam 32 znaki szesnastkowe ??
William Turrell,
1
@WilliamTurrell Dzieje się tak, ponieważ twój serwer musi mieć starszą (prawdopodobnie pre-openSSH 6.8) wersję ssh-keygen(lub twój serwer-serwer nie nadąża za czasami i nadal zapewnia tylko skróty md5 zamiast nowego SHA256). Istnieją obejścia wymienione tutaj: superuser.com/questions/929566
SeldomNeedy 27.04.2016
9

Trochę bardziej szczegółowo : ponieważ komunikat ostrzegawczy odnosi się do odcisku palca dla klucza ECDSA wysłanego przez zdalny host, zbieramy informacje o kluczu publicznym (ecdsa) hosta:

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

Następnie możemy dowiedzieć się, gdzie w naszym pliku znane_hosty jest klucz publiczny (ecdsa):

ssh-keygen -l -F ipofhost

Jeśli chcemy porównać odciski palców, musimy umieścić zawartość naszego pliku znanego_hosta (tylko wpis związany z tym hostem), możemy go nazwać ecdsa_plik_pliku z nieznanych hostów, a następnie porównać je w następujący sposób:

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

I sprawdź, czy program pokazuje ten sam skrót.

Oczywiście nie pasują, dlatego dostałem komunikat ostrzegawczy (ssh sprawdza to dopasowanie wewnętrznie). Jeśli jesteśmy pewni zmiany adresu IP (więc nie mamy do czynienia z atakiem typu man-in-the-middle), możemy po prostu usunąć wpis tego hosta w naszym pliku znane_hosty, a następnym razem ssh do niego wprowadzimy nowy nowy wpis dla zostanie dodany do takiego pliku.

gugol
źródło