Отпечаток пальца PEM ssh ключ

У меня есть PEM-файл, который я добавляю в работающий ssh-agent:

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

4 ответа

Решение

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

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

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

(отпечатки пальцев отредактированы в выводе выше)

Вот один вкладыш, который должен делать то, что вы хотите, не требуя создания файла открытого ключа локально.

$ 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 здесь <<< для того, чтобы стандартный ввод был доступен как обычный файл (/dev/stdin) а не труба как ssh-keygen будет работать только с файлом.

Начиная с версии 7.2 openssh ssh-keygen поддерживает снятие отпечатков пальцев со стандартного ввода:

  • ssh-keygen (1): разрешить дактилоскопию со стандартного ввода, например, "ssh-keygen -lf -"

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

См. https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin для получения дополнительной информации.

Вы не получаете отпечаток пальца из файла закрытого ключа, но из файла открытого ключа.

На самом деле, ssh-keygen уже сказал вам следующее:

./query.pem не является файлом с открытым ключом.

Запустите его против публичной половины ключа, и он должен работать.

Вообще говоря

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

Когда у вас есть открытый ключ, процесс должен убедиться, что клиент удерживает соответствующую частную половину. Поскольку вы уже знаете, какие ключи вы пытаетесь проверить, вам не нужен отпечаток пальца.

Другие вопросы по тегам