Il peut ne pas y avoir de moyen de le faire avec les seuls outils OpenSSH.
Mais cela peut être fait assez facilement avec les outils OpenSSL. En fait, il existe au moins deux façons de le faire. Dans les exemples ci-dessous, ~/.ssh/id_rsa
est votre clé privée.
Une façon est d'utiliser dgst:
openssl dgst -sign ~/.ssh/id_rsa some-file
L'autre consiste à utiliser pkeyutl:
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Les deux écrivent une signature binaire sur la sortie standard. dgst prend une option -hex
qui imprime une représentation textuelle, avec quelques détails sur la forme de la signature. pkeyutl prend une option -hexdump
qui est un peu moins utile. Les deux fonctionnent avec les clés RSA et DSA. Je ne sais pas quel est le format de la sortie. Les deux commandes produisent des formats différents. J'ai l'impression que pkeyutl est considéré comme plus moderne que dgst.
Pour vérifier ces signatures:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
et :
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Le problème ici est $PUBLIC_KEY_FILE
. OpenSSL ne peut pas lire le format de clé publique d'OpenSSH, vous ne pouvez donc pas simplement utiliser id_rsa.pub
. Vous avez quelques options, mais aucune n'est idéale.
Si vous avez une version d'OpenSSH de 5.6 ou ultérieure, vous pouvez apparemment faire ceci:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Cela écrira la clé publique sur la sortie standard au format PEM, que OpenSSL peut lire.
Si vous avez la clé privée, et qu'il s'agit d'une clé RSA, alors vous pouvez extraire la clé publique (je suppose que le fichier de clé privée codé en PEM inclut une copie de la clé publique, car il n'est pas possible de dériver la clé publique de la clé privée elle-même) et l'utiliser:
openssl rsa -in ~/.ssh/id_rsa -pubout
Je ne sais pas s'il existe un équivalent pour DSA. Notez que cette approche nécessite une certaine coopération de la part du propriétaire de la clé privée, qui devra extraire la clé publique et l'envoyer au vérificateur potentiel.
Enfin, vous pouvez utiliser un programme Python écrit par un certain Lars pour convertir la clé publique d'OpenSSH au format OpenSSL.