Вопрос: Почему мой отпечаток пальца OpenSSH не соответствует фингерпринту клавиатуры для клавишной панели AWS EC2?


Когда я импортирую свой открытый ключ OpenSSH в брелок AWS EC2, отпечаток, который показывает AWS, не соответствует тому, что я вижу из:

ssh-keygen -l -f my_key

Это другая длина и имеет разные байты.

Зачем? Я уверен, что я загрузил правильный ключ.


59
2018-06-10 04:28


Источник




Ответы:


AWS EC2 показывает отпечаток SSH2, а не отпечаток OpenSSH, который все ожидают. Это не говорит об этом в пользовательском интерфейсе.

Он также показывает два совершенно разных вида отпечатков пальцев в зависимости от того, был ли ключ сгенерирован на AWS и загружен ли, или вы загрузили свой собственный открытый ключ.

Отпечатки пальцев, сгенерированные с помощью

ssh-keygen -l -f id_rsa

будем не соответствуют показаниям EC2. Вы можете использовать инструменты AWS API для создания отпечатка пальца с помощью ec2-fingerprint-key или использовать OpenSSL для этого.

Обратите внимание, что если вы изначально создали ключ на AWS, но затем снова загрузили его (скажем, в другой регион), вы получите разные отпечатки пальцев потому что это займет отпечаток SSH2 RSA, а не sha1, который он показывает для ключей, которые вы создали на AWS.

Забавно, эй? This screenshot has two copies of the same key in it with different fingerprints

В приведенном выше, test-generated был создан с использованием AWS EC2. test-generated-reuploaded является открытым ключом из генерируемого личного ключа AWS, извлеченного с помощью ssh-keygen -y и загружен снова. Третий ключ, test-uploaded, является локально сгенерированным ключом ... но локальным ssh-keygen -l отпечаток пальца 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

Ключи, созданные локально

Вы можете использовать OpenSSL, так как продемонстрировал Даниэль на форумах AWS, для создания отпечатка пальца в форме, используемой AWS, для отображения отпечатков пальцев для загруженных открытых ключей (SSH2 MD5), например:

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

Они могут быть сгенерированы путем извлечения публичной части из закрытого ключа и ее хэширования с использованием:

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

Ключи, созданные на AWS

Если ключевой отпечаток пальца, показанный на консоли AWS, длиннее, то это был закрытый ключ, созданный на AWS, например:

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

В этом случае вам необходимо использовать следующую команду, также показанную Даниэлем на форумах AWS, для генерации хэша sha1 на основе закрытого ключа:

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

на загруженном файле личного ключа / сертификата, созданного AWS. Он будет работать с ключами, которые вы конвертировали в формат OpenSSH.

Рекомендации

Видеть:


88
2018-06-10 04:28



Удовлетворяя недостающую ясность от AWS об этом, они открывают потенциальное нарушение безопасности, затрудняя проверку ключей - Jaime Hablutzel
Отличный ответ! На начальном ssh команда, с более новыми версиями вам нужна опция -E для указания формата md5: ssh-keygen -E md5 -l -f id_rsa, - RichVel


Если у вас есть только открытые ключи, вы можете сгенерировать отпечаток AWS следующим образом:

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

9
2018-02-17 13:28





В документах AWS есть ресурс http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#verify-key-pair-fingerprints

Если вы создали свою пару ключей с помощью AWS, вы можете использовать инструменты OpenSSL для создания отпечатка пальца из файла закрытого ключа:

копия

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

Если вы создали свою пару ключей с помощью стороннего инструмента и загрузили открытый ключ в AWS, вы можете использовать инструменты OpenSSL для создания отпечатка пальца из файла закрытого ключа на вашем локальном компьютере:

копия

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

Выход должен соответствовать отпечатку пальца, отображаемому на консоли.


2
2018-06-20 08:27





Для тех из нас, кто использует 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]))

1
2018-02-08 22:37



К сожалению, это не удалось для меня на macOS 10.11, используя последнюю версию Homebrew Python 2.7.13, с этой ошибкой: ValueError: PEM encryption format not supported. - RichVel
@RichVel, я не могу воспроизвести ошибку. Я только что тестировал на macOS 10.12 с помощью homeprew python 2.7.13 в virtualenv, и он работал отлично. Если бы я должен был догадаться, возможно, некоторые из требований C для pycrypto не были выполнены для вас. Может быть это может помочь? - Andy


Это то, что я использую:

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}'

Это генерирует отпечаток от открытого ключа, как и некоторые из вышеперечисленных.


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

Вот сценарий, который я использую, добавьте путь скрипта к env. Спасибо J.Doe за ответ


1
2018-06-25 06:59





На всякий случай это может быть полезно: https://ssh-vault.com/post/fingerprint/

например:

$ ssh-vault -u bob -f

Будет распечатываться отпечаток для пользовательского боба, соответствующий формату AWS.


0
2017-10-10 15:05