Відбиток пальця ssh-ключа PEM


30

У мене є файл PEM, який я додаю до запущеного агента 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)

Як я можу отримати відбиток ключа (який я бачу в ssh-agent) безпосередньо з файлу? Я знаю, ssh-keygen -l -f some_keyпрацює для "звичайних" ключів ssh, але не для файлів PEM.

Якщо я спробую ssh-keygen у файлі .pem, я отримаю:

$ 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.

Цей ключ починається з:

-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.

на відміну від "звичайного" приватного ключа, який виглядає так:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.

Чому ви думаєте, що він не працює для файлів PEM? Яку помилку ви отримуєте при спробі? .ssh/id_rsaФайл , створений з допомогою OpenSSH з використанням всіх значень за замовчуванням Є PEM файл. Приватні ключі за замовчуванням кодуються PEM. Насправді ви можете використовувати ключі RSA, які ви генеруєте за допомогою OpenSSL безпосередньо з OpenSSH.
Зоредаче

оновлений опис з виходом з ssh-keygen на .pem
Невідомо

(пізно, але занижено) @Zoredache: До 7.2 (у 2016 році після цього Q) ssh-keygen -lне можна прочитати файл privatekey, хоча інші операції ssh-keygenssh*) роблять. Але коли ssh-keygen генерує ключ, він записує як файл privatekey, наприклад, так id_rsa і відповідний файл publickey з .pubдоданим наприклад id_rsa.pub. Пізніше ssh-keygen -l буде намагатися додавати .pubдо назви файлу і читання цього файлу ОткритийКлюч.
dave_thompson_085

Відповіді:


34

Якщо ви хочете отримати відбиток пальця втраченого файла відкритого ключа, ви можете відновити його з файлу приватного ключа :

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

Тоді ви зможете встановити відкритий відбиток пальців:

$ ssh-keygen -lf path/to/store/public_key_file
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host (RSA)

У деяких новіших системах це видає відбиток ключа SHA256. Ви можете роздрукувати відбиток ключа ключа MD5 (форма двокрапки), використовуючи опцію -E:

$ ssh-keygen -E md5 -lf path/to/store/public_key_file
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

Або як один командний рядок :

$ ssh-keygen -yf /etc/ssh/ssh_host_ecdsa_key | ssh-keygen -E md5 -lf -
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

@ Відповідь MikeD - це насправді "правильна" відповідь на те, що шукав ОП (і що я шукав). AWS надає відбиток пальців у форматі, який він показав, при цьому пари цифр розділяються двокрапками. Його рішення (взято з наданої сторінки AWS) також генерує відбиток пальців таким же чином, щоб можна було правильно перевірити.
Майк Вільямсон

50

AWS " Перевірка відбитків вашого ключа-пари " надає два одношарові, які вирішують проблему, залежно від того, як створено ваш ключ.

Якщо ви створили свою пару ключів за допомогою AWS:

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

Або якщо ви створили свою ключову пару за допомогою стороннього інструменту:

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(відбитки пальців відредаговані у висновку вище)


6

Ось один вкладиш, який повинен робити те, що ви хочете, не вимагаючи створення відкритого файлу локально.

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

Для цього використовується рядок bash here <<<для того, щоб stdin був доступний як звичайний файл ( /dev/stdin), а не як труба, оскільки він ssh-keygenбуде працювати лише з файлом.

Станом на випуск 7.2 Opensh ssh-keygen підтримує відбитки пальців зі стандартного введення:

  • ssh-keygen (1): дозволити відбитки пальців зі стандартного введення, наприклад, "ssh-keygen -lf -"

Зауважте, що ця команда буде порушена з приватними ключами, які використовують парольну фразу і не використовують агент. Він повинен працювати з файлами pem, згенерованими AWS або OpenStack, які не використовують парольні фрази.

Дивіться https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin для отримання додаткової інформації.


У примітках до випуску не сказано, але за даними джерела станом на 7.2 -lтакож підтримується читання файлу privatekey (але не з stdin).
dave_thompson_085

2

Ви не отримаєте відбиток пальця з файлу приватного ключа, а з файла відкритого ключа.

Насправді, ssh-keygen вже вам це сказав:

./query.pem не є відкритим файлом.

Запустіть її проти загальнодоступної половини ключа, і вона повинна працювати.

Більш загально кажучи

Подумайте над цим: причиною відбитка пальця є те, що ви можете ідентифікувати відкритий ключ. Насправді, отримати хеш приватного ключа - це потенційна проблема безпеки, окрім того, що він марний для сервера (який навіть не має такого приватного ключа).

Щойно у вас є відкритий ключ, процес перевіряється, чи має клієнт утримування відповідної приватної половини. Оскільки ви вже знаєте, які ключі ви намагаєтеся перевірити, вам не потрібен відбиток пальця.


Проблема полягає в тому, що у мене немає відкритого ключа для цього приватного :( І інша річ, ssh-keygenпрацює на файлі приватного ключа RSA, який має додаткову інформацію на початку (див. Моє початкове повідомлення), але не на цьому. .
Невідомо

Тоді ви нічого не можете з цим зробити. Ви не можете отримати публічну половину ключа від приватної частини більше, ніж ви можете зробити зворотний.
Стефан

3
Це неправильно. Як @ominug вказував вище, ssh-keygen -yfце робить.
Стів Беннетт

4
@Stephane Хоча правильно на чистому рівні RSA, на практиці спосіб зберігання ключів у специфікації PKCS формат для приватних ключів насправді включає обидві клавіші. Порівняйте технічні характеристики приватного і публічного
Håkan Lindqvist

"Ви не можете отримати відкриту половину ключа від приватної частини ..." - так, ви, мабуть, можете. Візьміть модуль із приватного ключа та використовуйте 65537 як публічний показник, і, швидше за все, ви знайшли відкритий ключ.
Джим Флуд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.