Не может быть способа сделать это только с помощью инструментов OpenSSH.
Но это можно сделать довольно легко с помощью инструментов OpenSSL. На самом деле, есть как минимум два способа сделать это. В приведенных ниже примерах ~/.ssh/id_rsa
- ваш закрытый ключ.
Одним из способов является использование dgst:
openssl dgst -sign ~/.ssh/id_rsa some-file
Другой использует pkeyutl:
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Оба они записывают двоичную подпись в стандартный вывод. Команда dgst принимает параметр -hex
чтобы напечатать текстовое представление с некоторыми подробностями о форме подписи. pkeyutl принимает опцию -hexdump
которая немного менее полезна. Оба будут принимать ключи RSA и DSA. Я понятия не имею, каков формат вывода. Две команды создают разные форматы. У меня складывается впечатление, что pkeyutl считается более современным, чем dgst.
Чтобы проверить эти подписи:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
а также:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Проблема здесь в $PUBLIC_KEY_FILE
. OpenSSL не может прочитать формат открытого ключа OpenSSH, поэтому вы не можете просто использовать id_rsa.pub
. У вас есть несколько вариантов, ни один из которых не идеален.
Если у вас версия OpenSSH 5.6 или новее, вы можете сделать это:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Который запишет открытый ключ в стандартный вывод в формате PEM, который OpenSSL может прочитать.
Если у вас есть закрытый ключ, и это ключ RSA, то вы можете извлечь из него открытый ключ (я предполагаю, что файл закрытого ключа в кодировке PEM включает в себя копию открытого ключа, поскольку невозможно получить открытый ключ). от самого закрытого ключа), и используйте это:
openssl rsa -in ~/.ssh/id_rsa -pubout
Я не знаю, есть ли эквивалент DSA. Обратите внимание, что этот подход требует некоторого сотрудничества от владельца закрытого ключа, который должен будет извлечь открытый ключ и отправить его потенциальному верификатору.
Наконец, вы можете использовать программу на Python, написанную главой под названием Lars, для преобразования открытого ключа из формата OpenSSH в формат OpenSSL.