Vraag Waarom komt mijn OpenSSH-sleutelafdruk niet overeen met de vingerafdruk van de AWS EC2-console keypair?


Wanneer ik mijn openbare OpenSSH-sleutel importeer in de sleutelring van AWS EC2, komt de vingerafdruk die AWS laat zien niet overeen met wat ik zie:

ssh-keygen -l -f my_key

Het is een andere lengte en heeft verschillende bytes.

Waarom? Ik weet zeker dat ik de juiste sleutel heb geüpload.


63
2018-06-10 04:28


oorsprong




antwoorden:


AWS EC2 toont de SSH2-vingerafdruk, niet de OpenSSH-vingerafdruk die iedereen verwacht. Dit staat niet in de gebruikersinterface.

Het laat ook zien twee compleet verschillende soorten vingerafdrukken afhankelijk van of de sleutel op AWS is gegenereerd en gedownload, of dat u uw eigen openbare sleutel hebt geüpload.

Vingerafdrukken gegenereerd met

ssh-keygen -l -f id_rsa

zullen niet overeenkomen met wat EC2 laat zien. U kunt de AWS API-hulpmiddelen gebruiken om een ​​vingerafdruk te genereren met de ec2-fingerprint-key commando, of gebruik OpenSSL om het te doen.

Merk op dat als u oorspronkelijk een sleutel op AWS heeft gegenereerd, maar deze vervolgens opnieuw hebt geüpload (bijvoorbeeld naar een andere regio), u dan een krijgt verschillende vingerafdrukken omdat het de SSH2 RSA-vingerafdruk nodig heeft, in plaats van de sha1 die wordt weergegeven voor sleutels die u op AWS hebt gegenereerd.

Leuk, hé? This screenshot has two copies of the same key in it with different fingerprints

In bovenstaande, test-generated werd gegenereerd met behulp van AWS EC2. test-generated-reuploaded is de openbare sleutel van de persoonlijke sleutel die AWS heeft gegenereerd, uitgepakt met ssh-keygen -y en opnieuw geüpload. De derde sleutel, test-uploaded, is een lokaal gegenereerde sleutel ... maar de lokale ssh-keygen -l vingerafdruk is b2:2c:86:d6:1e:58:c0:b0:15:97:ab:9b:93:e7:4e:ea.

$ ssh-keygen -l -f theprivatekey
2048 b2:2c:86:d6:1e:58:c0:b0:15:97:ab:9b:93:e7:4e:ea
$ openssl pkey -in theprivatekey -pubout -outform DER | openssl md5 -c
Enter pass phrase for id_landp:
(stdin)= 91:bc:58:1f:ea:5d:51:2d:83:d3:6b:d7:6d:63:06:d2

Sleutels lokaal gegenereerd

U kunt OpenSSL gebruiken als gedemonstreerd door Daniel op de AWS-forums, om de vingerafdruk te genereren in het formulier dat door AWS wordt gebruikt om vingerafdrukken te tonen voor geüploade openbare sleutels (SSH2 MD5), zoals:

7a:58:3a:a3:df:ba:a3:09:be:b5:b4:0b:f5:5b:09:a0

Ze kunnen worden gegenereerd door het publieke deel uit de persoonlijke sleutel te halen en het te hashen met behulp van:

openssl pkey -in id_rsa -pubout -outform DER | openssl md5 -c

Sleutels gegenereerd op AWS

Als de vingerafdruk op de AWS-console langer is, was het een persoonlijke sleutel die op AWS is gegenereerd, zoals:

ea:47:42:52:2c:25:43:76:65:f4:67:76:b9:70:b4:64:12:00:e4:5a

In dit geval moet je de volgende opdracht gebruiken, die ook door Daniel op de AWS-forums wordt getoond, om een ​​sha1-hash te genereren op basis van de privésleutel:

openssl pkcs8 -in aws_private.pem -nocrypt -topk8 -outform DER | openssl sha1 -c

op het gedownloade door AWS gegenereerde privésleutel / certificaatbestand. Het werkt ook op sleutels die u naar het OpenSSH-formaat hebt geconverteerd.

Referenties

Zien:


92
2018-06-10 04:28



Verdrietig de ontbrekende duidelijkheid van AWS daarover, ze openen een potentiële inbreuk op de beveiliging waardoor het moeilijker wordt om sleutels te verifiëren - Jaime Hablutzel
Goed antwoord! Op de eerste ssh opdracht, met recentere versies heeft u een -E optie nodig om het md5-formaat te specificeren: ssh-keygen -E md5 -l -f id_rsa. - RichVel


Als u alleen openbare sleutels hebt, kunt u de AWS-vingerafdruk als volgt genereren:

ssh-keygen -e -f id_rsa.pub -m pkcs8 | openssl pkey -pubin -outform der | openssl md5 -c

9
2018-02-17 13:28





Er is een bron over AWS-documenten http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#verify-key-pair-fingerprints

Als u uw sleutelpaar hebt gemaakt met behulp van AWS, kunt u de OpenSSL-hulpprogramma's gebruiken om een ​​vingerafdruk te genereren uit het bestand met de privésleutel:

Kopiëren

$ openssl pkcs8 -in path_to_private_key -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c

Als u uw sleutelpaar hebt gemaakt met behulp van een hulpprogramma van derden en de openbare sleutel hebt geüpload naar AWS, kunt u de OpenSSL-hulpprogramma's gebruiken om een ​​vingerafdruk te genereren uit het bestand met de privésleutel op uw lokale computer:

Kopiëren

$ openssl rsa -in path_to_private_key -pubout -outform DER | openssl md5 -c

De uitvoer moet overeenkomen met de vingerafdruk die wordt weergegeven in de console.


2
2018-06-20 08:27





Voor degenen onder ons die Python gebruiken

from Crypto.PublicKey import RSA
import hashlib
import base64

#Load your key from disk, or a string, or generate.
my_key = RSA.importKey(open(my_rsa_private_key, 'r').read())

# Normal md5 fingerprint
fp_plain = hashlib.md5(base64.b64decode(my_key.exportKey('OpenSSH').strip().split()[1].encode('ascii'))).hexdigest()
print ':'.join(a+b for a,b in zip(fp_plain[::2], fp_plain[1::2]))

#AWS' EC2 fingerprint
public_only_key = RSA.importKey(my_key.exportKey('OpenSSH'))
fp_plain = hashlib.md5(public_only_key.exportKey('DER')).hexdigest()
print ':'.join(a+b for a,b in zip(fp_plain[::2], fp_plain[1::2]))

1
2018-02-08 22:37



Helaas faalde dit voor mij op macOS 10.11 met de nieuwste Homebrew Python 2.7.13, met deze foutmelding: ValueError: PEM encryption format not supported. - RichVel
@RichVel, ik kan de fout niet reproduceren. Ik heb net getest is op macOS 10.12 met homebrew python 2.7.13 in een virtualenv, en het werkte prima. Als ik moest raden, waren sommige van de C-vereisten voor pycrypto misschien niet voor jou gehaald. Kan zijn deze kan helpen? - Andy


Dit is wat ik gebruik:

openssl rsa -RSAPublicKey_in -in <(ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PEM) -inform PEM -outform DER 2>/dev/null | openssl md5 -c | awk '{print $2}'

Dit genereert de vingerafdruk van de openbare sleutel, vergelijkbaar met enkele van de bovenstaande.


1
2017-09-10 13:29





#!/bin/bash
key_file=$1
if [[ -n $key_pub_file ]]; then
    ssh-keygen -e -f $key_pub_file -m pkcs8 | openssl pkey -pubin -outform der | openssl md5 -c
else
    echo "pass the pub file as argument"
fi

Hier is een script dat ik gebruik, voeg het script pad toe aan env. Met dank aan J.Doe voor het antwoord


1
2018-06-25 06:59





Voor het geval dit nuttig zou kunnen zijn: https://ssh-vault.com/post/fingerprint/

bijvoorbeeld:

$ ssh-vault -u bob -f

Drukt de vingerafdruk af voor gebruiker bob die overeenkomt met het formaat dat AWS gebruikt.


0
2017-10-10 15:05