Mam plik PEM, który dodaję do działającego agenta ssh:
$ file query.pem
query.pem: PEM RSA private key
$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)
$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)
Jak mogę uzyskać odcisk palca klucza (który widzę w ssh-agent) bezpośrednio z pliku? Wiem, że ssh-keygen -l -f some_key
działa dla „normalnych” kluczy ssh, ale nie dla plików PEM.
Jeśli spróbuję ssh-keygen na pliku .pem, otrzymam:
$ ssh-keygen -l -f ./query.pem
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.
Ten klucz zaczyna się od:
-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.
w przeciwieństwie do „zwykłego” klucza prywatnego, który wygląda następująco:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.
ssh
openssl
certificate
fingerprint
Nieznany
źródło
źródło
.ssh/id_rsa
Plik generowany przez OpenSSH wykorzystując wszystkie domyślne to plik PEM. Klucze prywatne są domyślnie zakodowane w PEM. W rzeczywistości możesz używać kluczy RSA generowanych za pomocą OpenSSL bezpośrednio za pomocą OpenSSH.ssh-keygen -l
pytaniu ) nie można odczytać pliku klucza prywatnego, chociaż robią to innessh-keygen
(issh*
) operacje. Ale gdyssh-keygen
generuje klucz, zapisuje zarówno plik klucza prywatnego np. Jakid_rsa
i odpowiedni plik klucza publicznego z.pub
dodanym npid_rsa.pub
. Starszessh-keygen -l
będzie spróbować dodać.pub
do nazwy pliku można określić i czytając ten plik PublicKey.Odpowiedzi:
Jeśli chcesz odzyskać odcisk palca utraconego pliku klucza publicznego, możesz go odzyskać z pliku klucza prywatnego :
Następnie możesz ustalić publiczny odcisk palca:
W niektórych nowszych systemach drukuje odcisk palca SHA256 klucza. Możesz wydrukować odcisk palca MD5 klucza (formularz dwukropka), używając opcji
-E
:Lub jako jeden wiersz poleceń :
źródło
„ Weryfikacja odcisku palca pary kluczy ” firmy AWS zawiera dwa jednolinijki, które rozwiązują problem, w zależności od sposobu utworzenia klucza.
Jeśli utworzyłeś parę kluczy za pomocą AWS:
Lub, jeśli utworzyłeś parę kluczy za pomocą narzędzia innej firmy:
(odciski palców zredagowane na wydruku powyżej)
źródło
Oto jedna linijka, która powinna robić, co chcesz, bez konieczności lokalnego tworzenia pliku klucza publicznego.
Wykorzystuje ciąg bash tutaj
<<<
, aby stdin był dostępny jako zwykły plik (/dev/stdin
), a nie jako potok, ponieważssh-keygen
będzie działał tylko na pliku.Od wydania 7.2 openssh
ssh-keygen
obsługuje pobieranie odcisków palców ze standardowego wejścia:Zauważ, że to polecenie zostanie zerwane z kluczami prywatnymi, które używają hasła i nie używają agenta. Powinien działać z plikami pem generowanymi przez AWS lub OpenStack, które nie używają haseł.
Aby uzyskać więcej informacji, zobacz https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin .
źródło
-l
obsługuje także czytanie pliku klucza prywatnego (ale nie ze standardowego wejścia).Odcisk palca nie jest pobierany z pliku klucza prywatnego, ale z pliku klucza publicznego.
W rzeczywistości ssh-keygen powiedział ci już:
Uruchom go przeciwko publicznej połowie klucza i powinien działać.
Mówiąc bardziej ogólnie
Pomyśl o tym: powodem istnienia odcisku palca jest to, że możesz zidentyfikować klucz publiczny. W rzeczywistości uzyskanie skrótu klucza prywatnego jest potencjalnym problemem bezpieczeństwa obok bycia bezużytecznym dla serwera (który nawet NIE MA tego klucza prywatnego).
Po uzyskaniu klucza publicznego proces polega na sprawdzeniu, czy klient blokuje odpowiednią połowę prywatną. Ponieważ już wiesz, które klucze próbujesz zweryfikować, nie potrzebujesz odcisku palca.
źródło
ssh-keygen
działa na pliku klucza prywatnego RSA, który zawiera dodatkowe informacje na początku (patrz mój początkowy post), ale nie na tym. .ssh-keygen -yf
robi to.