Pode não haver uma maneira de fazer isso apenas com as ferramentas do OpenSSH.
Mas isso pode ser feito facilmente com as ferramentas OpenSSL. Na verdade, existem pelo menos duas maneiras de fazer isso. Nos exemplos abaixo, ~/.ssh/id_rsa
é sua chave privada.
Uma maneira é usar dgst :
openssl dgst -sign ~/.ssh/id_rsa some-file
O outro está usando pkeyutl :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Ambos escrevem uma assinatura binária para a saída padrão. A opção dgst aceita -hex
imprime uma representação textual, com alguns detalhes sobre a forma da assinatura. pkeyutl aceita uma opção -hexdump
, que é um pouco menos útil. Ambos aceitarão as chaves RSA e DSA. Não tenho idéia do que é o formato da saída. Os dois comandos produzem diferentes formatos. Tenho a impressão de que o pkeyutl é considerado mais moderno do que o dgst .
Para verificar essas assinaturas:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
e:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
O problema aqui é $PUBLIC_KEY_FILE
. O OpenSSL não pode ler o formato de chave pública do OpenSSH, então você não pode simplesmente usar id_rsa.pub
. Você tem algumas opções, nenhuma ideal.
Se você tem uma versão do OpenSSH de 5.6 ou posterior, aparentemente você pode fazer isso:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
O qual gravará a chave pública na saída padrão no formato PEM, que o OpenSSL pode ler.
Se você tem a chave privada, e é uma chave RSA, então você pode extrair a chave pública dela (eu suponho que o arquivo de chave privada codificado por PEM inclua uma cópia da chave pública, uma vez que não é possível derivar a chave pública da própria chave privada) e use isso:
openssl rsa -in ~/.ssh/id_rsa -pubout
Não sei se há um equivalente de DSA. Observe que essa abordagem requer alguma cooperação do proprietário da chave privada, que terá que extrair a chave pública e enviá-la ao verificador em potencial.
Por fim, você pode usar um programa em Python escrito por um sujeito chamado Lars para converter a chave pública do OpenSSH para o formato OpenSSL.