Czy istnieje sposób programowego uzyskania odcisku palca klucza serwera SSH bez uwierzytelniania ?
Próbuję ssh -v user@host false 2>&1 | grep "Server host key"
, ale zawiesza się oczekiwanie na hasło, jeśli uwierzytelnianie oparte na kluczu nie jest skonfigurowane.
ssh-keygen -l -f - <(ssh-keyscan host)
jednak?ssh-keyscan host | ssh-keygen -lf -
ssh-keygen -l -f <(ssh-keyscan host)
ssh-keygen -l -f -
działa zgodnie z oczekiwaniami w ssh-keygen 7.2 i nowszych. Tworzy kilka wierszy komentarza do STDERR, które można odfiltrować, jak wspomniano w odpowiedzi Anthony Geoghegan lubssh-keyscan host 2>/dev/null | ssh-keygen -l -f -
Niedawno musiałem to zrobić sam, więc pomyślałem, że dodam odpowiedź, która pokazuje, jak można to zrobić (z wersjami OpenSSH 7.2 lub nowszą ) w jednym wierszu za pomocą podstawiania procesów:
Poniższy tekst wyjaśnia, jak działają te polecenia, i podkreśla niektóre różnice w zachowaniu między starszymi i nowszymi wersjami narzędzi OpenSSH.
Pobierz klucze hosta publicznego
ssh-keyscan
Komenda została opracowana tak, że użytkownicy mogą uzyskać klucze hostów publicznych bez konieczności uwierzytelnienia na serwerze SSH. Ze strony podręcznika:Typ klucza
Typ klucza do pobrania jest określany za pomocą
-t
opcji.rsa1
(przestarzała wersja protokołu SSH 1)rsa
dsa
ecdsa
(ostatnie wersje OpenSSH)ed25519
(ostatnie wersje OpenSSH)We współczesnych wersjach OpenSSH domyślnymi typami kluczy do pobrania są
rsa
(od wersji 5.1),ecdsa
(od wersji 6.0) ied25519
(od wersji 6.7).Ze starszymi wersjami w
ssh-keyscan
(przed) OpenSSH wersji 5.1 The domyślny typ klucz był przestarzałyrsa1
(SSH Protokół 1) główne typy tak musiałby być wyraźnie określone:Uzyskaj skróty linii papilarnych kluczy Base64
ssh-keyscan
wypisuje klucz hosta serwera SSH w formacie zakodowanym w Base64 . Aby przekonwertować to na skrót linii papilarnych,ssh-keygen
można użyć narzędzia z jego-l
opcją drukowania odcisku palca określonego klucza publicznego.Jeśli używasz Bash, Zsh (lub powłoki Korna), możesz zastosować podstawienie procesu dla poręcznej jednowarstwowej:
Uwaga : W wersjach OpenSSH wcześniejszych niż 7.2 funkcje używane przez
ssh-keygen
do odczytu plików nie radziły sobie bardzo dobrze z nazwanymi potokami (FIFO), więc ta metoda nie działała, co wymagało użycia plików tymczasowych.Algorytmy mieszania
Najnowsze wersje
ssh-keygen
print SHA256 mieszań papilarnych kluczy. Aby uzyskać skróty MD5 odcisków palców klucza serwera (stare zachowanie),-E
można użyć opcji określającej algorytm skrótu:Korzystanie z rurociągu
Jeśli używasz powłoki POSIX (takiej jak
dash
), która nie obsługuje zastępowania procesów, inne rozwiązania wykorzystujące pliki tymczasowe będą działać. Jednak w nowszych wersjach OpenSSH (od wersji 7.2) można użyć prostego potoku, ponieważssh-keygen
będzie on akceptowany-
jako nazwa pliku dla standardowego strumienia wejściowego, umożliwiając jednoliniowe polecenie potoku.źródło
ssh-keygen
ze starszych wersji OpenSSH występuje problem z odczytem z FIFO / nazwanego potoku. Zajmę się tym (i zaktualizuję swoją odpowiedź), kiedy będę miał trochę wolnego czasu.printf
instrukcji debugowania dodo_fingerprint()
funkcji zauważyłem, że w wersjach OpenSSH wcześniejszych niż 7.2 funkcje używanessh-keygen
do odczytu plików nie radziły sobie bardzo dobrze z nazwanymi potokami (FIFO), więc metoda podstawienia procesu nie zadziałałaby.nmap
zapewnia tę możliwość za pomocąssh-hostkey
skryptu.Aby zwrócić szesnastkowy odcisk klucza:
Aby zwrócić zawartość klucza:
Aby zwrócić bańkę wizualną klucza
Aby zwrócić wszystkie powyższe:
Źródło: dokumenty nmap
źródło
-p
opcję określającą port, np-p 22000
. Możliwe jest również użycie-vv
opcji zwiększenia gadatliwości (ilość podanych informacji)filezilla wyświetla klucze zakodowane przy pomocy md5 w formacie szesnastkowym .
aby znaleźć to na swoim komputerze z systemem Linux Ubuntu , użyj tego polecenia:
Uwaga: zamień „localhost” na ip komputera, który chcesz sprawdzić.
źródło
Oto skrypt powłoki (głównie powłoka Bourne'a, ale za pomocą
local
słowa kluczowego, które jest dostępne w najnowocześniejszych/bin/sh
), które napisałem, aby to zrobić. Użyj tego jakssh-hostkey hostname
. Wyświetli odciski palców w formacie sha256 i md5 dla wszystkich kluczy hostów dla podanej nazwy hosta lub adresu IP. Możesz także ręcznie określić „md5
” lub „sha256
” jako drugi argument, aby pokazać tylko ten konkretny format.Używa pliku tymczasowego zamiast potokowania, aby był zgodny ze starszymi pakietami OpenSSH (jak opisano w innych odpowiedziach). Plik tymczasowy wykorzystuje
/dev/shm
(pamięć współdzieloną), jeśli jest dostępna.źródło