Отпечаток пальца 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 не является файлом с открытым ключом.
Запустите его против публичной половины ключа, и он должен работать.
Вообще говоря
Подумайте об этом: причина существования отпечатка пальца заключается в том, что вы можете идентифицировать открытый ключ. На самом деле, получение хэша закрытого ключа является потенциальной проблемой безопасности, поскольку он бесполезен для сервера (который даже не имеет рассматриваемого закрытого ключа).
Когда у вас есть открытый ключ, процесс должен убедиться, что клиент удерживает соответствующую частную половину. Поскольку вы уже знаете, какие ключи вы пытаетесь проверить, вам не нужен отпечаток пальца.