Oblicz odcisk palca klucza RSA

903

Muszę przeprowadzić audyt klucza SSH dla GitHub, ale nie jestem pewien, jak znaleźć mój odcisk palca klucza RSA. Pierwotnie postępowałem zgodnie z przewodnikiem, aby wygenerować klucz SSH w systemie Linux.

Jakie polecenie muszę wprowadzić, aby znaleźć mój bieżący odcisk klucza RSA?

Zakoff
źródło
21
FWIW, wracam do tego postu, ponieważ na githubie widzę odciski palców na klawiszach i chcę się upewnić, że używam odpowiedniego klucza prywatnego. Może to nie gwarantuje tag GitHub ponieważ ten post pomaga, że dochodzenie GitHub związane?
hamx0r
4
@ hamx0r Wróciłem do tego postu, ponieważ Gitlab używa również tych odcisków palców ...
Ray Foss
1
Doszedłem do niego z powodu Travisa, który również z niego korzysta. : D
Per Lundberg
4
Dla wszystkich użytkowników Linuksa, którzy „wracają do tej strony”, skopiuj to do swojego bashrc: function fingerprint() { ssh-keygen -lf $1 -E md5 }Następnie (po źródle bashrc) możesz uzyskać odcisk palca za pomocąfingerprint ~/.ssh/key_file
Jeff Diederiks
1
Dla tych, którzy próbują funkcji @JeffDiederiks i zastanawiają się, dlaczego ona nie działa, funkcje Bash potrzebują trailing ;w ciele, więc użyj function fingerprint() { ssh-keygen -lf $1 -E md5; }zamiast tego.
tjjfvi

Odpowiedzi:

1261

Uruchom następującą komendę, aby pobrać odcisk palca SHA256 klucza SSH ( -loznacza „listę” zamiast utworzyć nowy klucz, -foznacza „nazwę pliku”):

$ ssh-keygen -lf /path/to/ssh/key

Na przykład na moim komputerze uruchomiłem polecenie (używając klucza publicznego RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Aby uzyskać format linii papilarnych GitHub (MD5) z nowszymi wersjami ssh-keygen, uruchom:

$ ssh-keygen -E md5 -lf <fileName>

Informacje o bonusie:

ssh-keygen -lfdziała również na known_hostsi authorized_keyspliki.

Aby znaleźć większość kluczy publicznych w systemach Linux / Unix / OS X, uruchom

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(Jeśli chcesz zajrzeć do homedirów innych użytkowników, musisz być rootem lub sudo.)

ssh-add -lJest bardzo podobny, ale wymienia odciski kluczy dodanych do środka. (Użytkownicy OS X zauważają, że magiczny SSH bez hasła za pomocą pęku kluczy nie jest tym samym, co używanie ssh-agent.)

Marvin Pinto
źródło
5
Jak znaleźć ścieżkę?
pal4life
4
Ponieważ twój przykładowy odcisk szesnastkowy składa się z 32 cyfr, uważam, że byłby to odcisk palca MD5, prawda? W przeciwieństwie do 40-cyfrowego odcisku palca, który wskazywałby na SHA1
culix
8
W systemach innych niż Ubuntu odpowiedni plik może znajdować się w / etc / ssh, np. /Etc/ssh/ssh_host_rsa_key.pub
Zorawar
12
Warto zauważyć, że odcisk palca powinien być taki sam dla obu kluczy w kluczu publicznym / prywatnym; więc odcisk palca .ssh/id_rsapowinien być taki sam jak dla .ssh/id_rsa.pub. Możesz więc użyć jednego z nich (a jeśli jesteś podobny do mnie i uwielbiasz uzupełnianie tabulatorów, powoduje to, że praca wymaga 2 razy mniej naciśnięć klawiszy. Wydajność!).
Parthian Shot
25
Zastosowanie ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubjeśli nie chcesz standardowego sha256 wyjście
user8162
675

Nowsze polecenia SSH będą wyświetlać odciski palców jako SHA256 klucz .

Na przykład:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

Jeśli chcesz porównać go ze starym odciskiem palca, musisz również określić, aby użyć funkcji mieszania odcisków palców MD5 .

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

Także dostępny: -E sha1

Aktualizacja ... TAK ... tak ... wiem ... Nie należy już używać kluczy DSA do SSH, zamiast tego należy użyć starszego klucza RSA lub nowszego klucza ekliptyki.

Do tych „administratorów”, którzy wciąż edytują polecenie, którego użyłem powyżej. Przestań go zmieniać! Sprawiasz, że polecenie i wynikowy wynik są niepoprawne!

Anthony
źródło
6
Warto w tym miejscu wspomnieć, że możesz sshpokazać, że używasz starego odcisku palca MD5 na serwerze ssh -o FingerprintHash=md5 example.org, jak wspomniano w tej odpowiedzi . (Właśnie tego szukałem, a ta odpowiedź doprowadziła mnie do tej, więc sądzę, że inni mogą mieć podobne doświadczenie.)
Jonathan Y.
25
Ta odpowiedź jest najbardziej pomocna dla tych, którzy chcą porównać swoje klucze z tym, co pokazuje github.com (tj. MD5 sformatowany w formacie szesnastkowym)
hamx0r 24.10.16
2
Również bardzo pomocne w porównaniu z tym, co zgłosi kit.
pjcard,
27

Aby zobaczyć swój klucz na Ubuntu, po prostu wprowadź następujące polecenie na terminalu:

ssh-add -l

Otrzymasz takie wyjście: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23twoja nazwa @ ubuntu (RSA)

Jeśli jednak pojawi się błąd, taki jak; Could not open a connection to your authentication agent.
Oznacza to, że ssh-agent nie działa. Możesz go uruchomić / uruchomić za pomocą: ssh-agent bash(dzięki @Richard w komentarzach), a następnie uruchomić ponowniessh-add -l

Komu
źródło
5
Jeśli nie korzystasz z systemu Ubuntu, możesz niestety uzyskać komunikat „Nie można nawiązać połączenia z agentem uwierzytelniającym”.
rogerdpack,
1
Działa to tylko wtedy, gdy uruchomiony jest agent uwierzytelniania.
Rufflewind
Aby uruchomić agenta uwierzytelniania, możesz użyć ssh-agent bashi kontynuować życie. W życiu jak zawsze; ssh-agentnie jest gwarantowane jako spójna implementacja we wszystkich systemach.
Richard Kenneth Niescior,
Kolejna wskazówka dla systemu Linux; Opcja -F (zrzut odcisku palca) ssh-keygen-g3 wyświetli odcisk palca klucza: $ ssh-keygen-g3 -F /path/to/keyfile.pub answer.ssh.com/questions/494/…
AnneTheAgile
18

Para kluczy (klucze prywatny i publiczny) będzie miała ten sam odcisk palca; więc w przypadku, gdy nie pamiętasz, który klucz prywatny należy do którego klucza publicznego, znajdź dopasowanie, porównując ich odciski palców.

Najczęściej głosowana odpowiedź Marvina Vinto stanowi odcisk palca publicznego pliku klucza SSH. Można również zapytać o odcisk palca odpowiedniego prywatnego klucza SSH, ale wymaga on dłuższej serii kroków, jak pokazano poniżej.

  1. Załaduj agenta SSH, jeśli jeszcze tego nie zrobiłeś. Najłatwiej jest wywołać

    $ ssh-agent bash
    

    lub

    $ ssh-agent tcsh
    

    (lub inną używaną powłokę).

  2. Załaduj klucz prywatny, który chcesz przetestować:

    $ ssh-add /path/to/your-ssh-private-key
    

    Zostaniesz poproszony o wprowadzenie hasła, jeśli klucz jest chroniony hasłem.

  3. Teraz, jak powiedzieli inni, pisz

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...to odcisk palca, którego szukasz. Jeśli jest wiele kluczy, wydrukowanych zostanie wiele wierszy, a ostatni wiersz zawiera odcisk palca ostatnio załadowanego klucza.

  4. Jeśli chcesz zatrzymać agenta (tj. Jeśli wywołałeś krok 1 powyżej), po prostu wpisz `exit 'na powłoce, a wrócisz do powłoki przed załadowaniem agenta ssh.

Nie dodam nowych informacji, ale mam nadzieję, że ta odpowiedź jest jasna dla użytkowników na wszystkich poziomach.

Wirawan Purwanto
źródło
Pierwszy akapit jest nieprawdziwy ssh-add -li ssh-keygen -lzwraca ten sam odcisk palca dla danej pary kluczy. Ponadto powinna to być mała litera -l, a nie wielkie litery.
Albertas Agejevas
Nie kwestionuję tego ssh-add -li zwracam ssh-keygen -lten sam odcisk palca dla danej pary kluczy. Ale nie rozumiem, co było nie tak z moimi oryginalnymi stwierdzeniami z pierwszego akapitu. Dodałem zdanie w celu wyjaśnienia.
Wirawan Purwanto
1
Po prostu łatwiej jest skierować ssh-keygen na klucz, niż uruchomić agenta, a następnie załadować klucz, a następnie pobrać odcisk palca.
Albertas Agejevas
1
Jeśli masz tylko klucz prywatny, niekoniecznie musisz go uruchomić ssh-agent. Zakładając, PRIVKEYże ustawiono plik klucza prywatnego i plik PUBKEY(początkowo nieistniejący) plik klucza publicznego, wykonaj: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"aby ponownie wygenerować klucz publiczny SSH, to ssh-keygen -E md5 -l -v -f "${PUBKEY}"jeśli chcesz skrót MD5 lub tylko skrót ssh-keygen -l -v -f "${PUBKEY}"SHA-256 (SHA-256 jest teraz domyślny).
David Tonhofer,
12

Najszybszy sposób, jeśli klucze znajdują się w agencie SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

Każdy klucz w agencie zostanie wydrukowany jako:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)
cmcginty
źródło
3
Potrzebowałem szybszego sposobu dopasowania moich kluczy do kluczy na moim koncie GitHub, a ta odpowiedź pomogła mi to zrobić.
evanjs
11

Odtwarzam tutaj treść z forów AWS , ponieważ uznałem ją za przydatną w moim przypadku użycia - chciałem sprawdzić, który z moich kluczy pasuje do tych, które zaimportowałem do AWS

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

Gdzie: - primary.pemjest kluczem prywatnym do sprawdzenia

Phil
źródło
9
$ ssh-add -l 

działa również w systemie Mac OS X 10.8 (Mountain Lion) - 10.10 (Yosemite).

Obsługuje również opcję -Eokreślenia formatu linii papilarnych, więc w przypadku, gdy potrzebny jest MD5 (jest często używany, np. Przez GitHub), po prostu dodaj -E md5do polecenia.

geeklizzard
źródło
+1 za najprostszą odpowiedź. Z man ssh-addtej opcji -ljest „Wyświetla odciski palców wszystkich tożsamości obecnie reprezentowanych przez agenta”
XavierStuvw
8

W systemie Windows, jeśli korzystasz z PuTTY / Pageant, odcisk palca jest wyświetlany po załadowaniu klucza PuTTY (.ppk) do Pageant. Jest to przydatne, jeśli zapomnisz, którego używasz.

Wpisz opis zdjęcia tutaj

Dmitri R117
źródło
3
Dziękujemy, czasami my, ludzie Linuksa, zapominamy o oknach, szczególnie gdy OP wspomniał o kitach.
Jmons,
@ DmitriR117 dlaczego namalowałeś czarny klucz publiczny, który może być znany całemu światu?
Michu93,
8

To jest funkcja powłoki, której używam, aby uzyskać odcisk palca klucza SSH do tworzenia kropelek DigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

Umieść go w swoim ~/.bashrcźródle, a następnie otrzymasz odcisk palca w następujący sposób:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9
Bryce Guinta
źródło
2

Jeśli Twój agent SSH jest uruchomiony, to znaczy, że tak

ssh-add -l

aby wyświetlić listę odcisków palców RSA wszystkich tożsamości, lub -L klucze publiczne.

Jeśli agent nie działa, spróbuj:

ssh-agent sh -c 'ssh-add; ssh-add -l'

A dla twoich kluczy publicznych:

ssh-agent sh -c 'ssh-add; ssh-add -L'

Jeśli pojawi się komunikat: „ Agent nie ma tożsamości. ”, najpierw musisz wygenerować klucz RSA ssh-keygen.

kenorb
źródło
Zainstalowałem openssh, a następnie próbowałem połączyć się z serwerem za pomocą putty. Przedstawia odcisk palca 256 klawiszy ssh-ed25519, ale otrzymuję komunikat „brak tożsamości”. Czy wiesz, gdzie można znaleźć i wymienić ten klucz? Czy korzystanie z tego klucza jest wadą w porównaniu z generowaniem nowego klucza RSA?
lordcheeto
Znaleziono to pod /etc/ssh/ssh_host_ed25519_key.pub. Pozostaje druga część pytania: czy jest jakaś wada korzystania z tego automatycznie generowanego klucza?
lordcheeto
1

Czasami możesz mieć kilka kluczy w swoim ~/.sshkatalogu i nie wiem, który pasuje do odcisku palca pokazanego przez GitHub / Gitlab / etc.

Oto jak wyświetlić nazwy plików kluczy i odciski palców MD5 wszystkich kluczy w ~/.sshkatalogu:

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(Aby poznać znaczenie parametrów, zapoznaj się z odpowiedzią na temat findpolecenia .

Pamiętaj, że prywatne / publiczne pliki należące do jednego klucza mają ten sam odcisk palca, więc zobaczysz duplikaty.

Dan Dascalescu
źródło
0

Google Compute Engine pokazuje odcisk palca klucza hosta SSH na wyjściu szeregowym instancji Linuksa. Interfejs API może pobrać te dane z GCE i nie trzeba logować się do instancji.

Nie znalazłem go nigdzie indziej niż z wyjścia szeregowego. Myślę, że odcisk palca powinien znajdować się w bardziej przyjaznym dla programisty miejscu.

Wydaje się jednak, że zależy to od rodzaju instancji. Korzystam z instancji Debian 7 (Wheezy) f1-micro.

re Paul
źródło
-1

Aby sprawdzić zdalny serwer SSH przed pierwszym połączeniem, możesz zajrzeć na stronę www.server-stats.net/ssh/ aby zobaczyć wszystkie klucze SHH dla serwera, a także od kiedy klucz jest znany.

To nie jest jak certyfikat SSL, ale zdecydowanie należy to zrobić przed pierwszym połączeniem z dowolnym serwerem SSH.

p974
źródło
4
Użytkownik nie szukał strony internetowej innej firmy, ale wiersz poleceń z samego systemu operacyjnego.
Andrew Barber
Jest to w zasadzie wtyczka konwergencji , z wyjątkiem SSH zamiast SSL i tylko z jednym (nieco niepewnym) notariuszem. Ten dźwięk jest w porządku?
Parthian Shot
-1

W Fedorze robię [locate ~ / .ssh], co mówi mi, że klucze to @

/root/.ssh
/root/.ssh/authorized_keys
Jesse William Mac Dougall
źródło
OP wydaje się wiedzieć, gdzie znaleźć swoje klucze (to nie jest, ~/.ssh/id*.pubjest) i chce uzyskać odciski palców.
Gert van den Berg