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

Lorsque j'impose ma clé publique OpenSSH dans la clé de l'AWS EC2, l'empreinte digitale 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 clé correcte.

5 Solutions collect form web for “Pourquoi mon empreinte digitale de la clé OpenSSH ne correspond-elle pas à l'empreinte de clé de clé de la 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 différentes selon que la clé a été générée sur AWS et téléchargé, ou si vous avez téléchargé votre propre clé publique.

Les empreintes digitales générées avec

 ssh-keygen -l -f id_rsa 

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

Notez que si vous avez initialement généré une clé sur AWS, mais que vous l'avez transféré à 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 clés 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 clé publique de la clé privée AWS générée, extraite avec ssh-keygen -y et téléchargée à nouveau. La troisième clé, test-uploaded , est une clé 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 clés 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 clé 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 clé privée générée sur 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 commande suivante, également affichée par Daniel sur les forums AWS, pour générer un hash sha1 basé sur la clé privée:

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

Sur le fichier de clé / certificat privé généré par AWS. Cela fonctionnera également sur les clés que vous avez convertis au format OpenSSH.

Les références

Voir:

Si vous avez uniquement des clés 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 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])) 

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 clés à l'aide d'AWS, vous pouvez utiliser les outils OpenSSL pour générer une empreinte digitale à partir du fichier de clé 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 clés à l'aide d'un outil tiers et que vous avez téléchargé la clé publique sur AWS, vous pouvez utiliser les outils OpenSSL pour générer une empreinte digitale à partir du fichier de clé privée 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.

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'utilisateur correspondant au format qu'utilise AWS.

  • Le même process de connection SSH fonctionne pour l'user A mais pas pour l'user B
  • Configuration de la key Gerrit ssh sur le server Windows
  • Collection de marionnettes sshkey pour les systèmes non-marionnettes
  • Autorisation SSH basée sur key refusée (publickey) Ubuntu 12-04
  • Copier le directory en utilisant le tunnel de ssh
  • Authentification key SSH
  • Accepte automatiquement l'empreinte digitale de la clé rsa à partir de la ligne de commande
  • L'hôte distant fait une request étrange. Est-ce que je suis en security?
  • ForwardAgent à Jenkins
  • Impossible de ssh à GCE: "Autorisation refusée (publickey)"
  • La key ssh rsa auth ne se produit que si je suis déjà connecté sur la console
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.