Pourquoi mon empreinte digitale OpenSSH ne correspond-elle pas à l'empreinte digitale de key de console AWS EC2?

Lorsque j'importe ma key publique OpenSSH dans la key USB de AWS EC2, l'empreinte que AWS montre ne correspond pas à ce que je vois:

ssh-keygen -l -f my_key 

C'est une longueur différente et a des octets différents.

Pourquoi? Je suis sûr que j'ai téléchargé la key correcte.

5 Solutions collect form web for “Pourquoi mon empreinte digitale OpenSSH ne correspond-elle pas à l'empreinte digitale de key de console AWS EC2?”

AWS EC2 montre l'empreinte digitale SSH2, pas l'empreinte OpenSSH que tout le monde attend. Cela ne dit pas cela dans l'IU.

Il montre également deux types d'empreintes digitales complètement différentes selon que la key a été générée sur AWS et téléchargé, ou si vous avez téléchargé votre propre key publique.

Les empreintes digitales générées avec

 ssh-keygen -l -f id_rsa 

ne correspondra pas à ce que EC2 montre. Vous pouvez utiliser les outils de l'API AWS pour générer une empreinte digitale avec la command ec2-fingerprint-key ou utiliser OpenSSL pour le faire.

Notez que si vous avez initialement généré une key sur AWS, mais que vous l'avez téléchargé à nouveau (par exemple, dans une autre région), vous obtiendrez une empreinte digitale différente car il prend l'empreinte SSH2 RSA plutôt que le sha1 qu'il montre pour les keys que vous généré sur AWS.

Fun, hey? Cette capture d'écran comporte deux copies de la même clé avec différentes empreintes digitales

Dans ce qui précède, le test-generated été généré en utilisant AWS EC2. test-generated-reuploaded est la key publique de la key privée AWS générée, extraite avec ssh-keygen -y et téléchargée à nouveau. La troisième key, test-uploaded , est une key générée localement … mais l'empreinte locale ssh-keygen -l est 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 

Clés générées localement

Vous pouvez utiliser OpenSSL, comme l'a démontré Daniel sur les forums AWS , pour générer l'empreinte digitale sous la forme utilisée par AWS pour afficher les empreintes digitales pour les keys publiques téléchargées (SSH2 MD5), comme:

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

Ils peuvent être générés en extrayant la partie publique de la key privée et en la hachant en utilisant:

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

Clés générées sur AWS

Si l'empreinte digitale indiquée sur la console AWS est plus longue, il s'agissait d'une key privée générée par AWS, comme:

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

Dans ce cas, vous devez utiliser la command suivante, également affichée par Daniel sur les forums AWS, pour générer un hash sha1 basé sur la key privée:

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

sur le file de key privée / certificate généré par AWS. Il fonctionnera également sur les keys que vous avez convertis au format OpenSSH.

Les references

Voir:

Si vous avez uniquement des keys publiques, vous pouvez générer l'empreinte AWS comme suit:

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

Pour ceux d'entre nous utilisant Python

 from Crypto.PublicKey import RSA import hashlib import base64 #Load your key from disk, or a ssortingng, 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').ssortingp().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])) 

Il existe une ressource sur les documents AWS http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#verify-key-pair-fingerprints

Si vous avez créé votre paire de keys à l'aide d'AWS, vous pouvez utiliser les outils OpenSSL pour générer une empreinte digitale à partir du file de key privée:

Copie

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

Si vous avez créé votre paire de keys à l'aide d'un outil tiers et que vous avez téléchargé la key publique sur AWS, vous pouvez utiliser les outils OpenSSL pour générer une empreinte digitale à partir du file key privé sur votre machine locale:

Copie

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

La sortie doit correspondre à l'empreinte digitale affichée dans la console.

Juste au cas où cela pourrait être utile: https://ssh-vault.com/post/fingerprint/

par exemple:

 $ ssh-vault -u bob -f 

Imprime l'empreinte digitale pour l'user qui correspond au format qu'utilise AWS.

  • L'authentification par key publique SSH ne fonctionne que si une session active existe avant
  • Différentes empreintes ssh sur le server. (Attaque MITM?)
  • Ne peut pas faire ssh (sans requestr passowrd) au système distant à l'aide des touches d'authentification
  • Comment créer une clé ssh pour un autre utilisateur?
  • Existe-t-il un moyen plus simple d'ajouter une authentification par clé publique aux nouveaux utilisateurs?
  • Installation de la key ssh
  • Après la restauration de la sauvegarde GitLab, les nouvelles keys publiques SSH remplacent au hasard les keys existantes d'autres users
  • Les keys ssh rsa expirent après 5 ans
  • Bloquer les keys ssh sans passepart
  • Utilisation de l'authentification par paire de keys ssh et désactivation de l'authentification par mot de passe ssh - que se passe-t-il si la key privée est perdue?
  • Dissortingbuer les keys publiques ssh parmi les hôtes
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.