Como verificar se um par de chaves pública / privada RSA corresponde

48

Eu tenho dois arquivos, id_rsa e id_rsa.pub . Qual comando pode ser usado para validar se eles são um par válido ?

    
por Ryan 11.09.2012 / 18:24

4 respostas

72

Preferiria o modo ssh-keygen -y -e -f <private key> em vez da resposta aceita de Como você testa um par de chaves DSA pública / privada? no Stack Overflow.

ssh-keygen -y -e -f <private key> usa uma chave privada e imprime a chave pública correspondente, que pode ser comparada diretamente às suas chaves públicas disponíveis. (Dica: cuidado com comentários ou opções-chave.)

(Como está fazendo isso? Eu só espero que a chave pública seja codificada direta ou indiretamente na chave privada ...)

Eu mesmo precisava disso e usei o seguinte one-liner da Bash. Não deve sair nada se as chaves estiverem juntas. Aplique um pouco de -q ao diff nos scripts e o diff apenas define o código de retorno apropriadamente.

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
    
por 11.09.2012 / 19:58
16

Dependendo de onde você obtiver o arquivo de chave pública que está testando, a resposta aceita pode gerar resultados falso-positivos. Isso é devido ao comportamento descrito no comentário de @drewbenn. Especificamente, quando a opção -e é usada com o arquivo de chave privada como o parâmetro -f option, simplesmente reproduz (mas reformata) o que está no arquivo de chave pública associado.

Em outras palavras,

ssh-keygen -y -f id_rsa

(aparentemente) gera o valor da chave pública e

ssh-keygen -y -e -f id_rsa

simplesmente e produz (e reformata) a chave no existente id_rsa.pub qualquer que seja .

No meu caso, tenho que verificar se o par não foi corrompido. Então, decidi comparar o seguinte:

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

com

cut -d' ' -f 2 id_rsa.pub

Portanto:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

Talvez isso não seja tão flexível, mas é melhor para as minhas necessidades. Talvez isso ajude alguém.

    
por 02.04.2016 / 02:04
2

Se eles estiverem em seu sistema local, cole id_rsa.pub em $HOME/.ssh/authorized_keys e ssh a localhost usando a tecla id_rsa . Se funcionar, eles combinam.

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
    
por 11.09.2012 / 18:26
-2

Uso:

diff -s <(ssh-keygen -y -f ~/.ssh/id_rsa) <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
    
por 04.03.2018 / 19:54