ssh-keygen -y -e -f <private key>pega uma chave privada e imprime a chave pública correspondente, que pode ser diretamente comparada às suas chaves públicas disponíveis. (Dica: cuidado com os comentários ou as opções principais).
(Como diabos está fazendo isso? Só espero que a chave pública seja codificada direta ou indiretamente na chave privada ...)
Eu mesmo precisava disso e usei a seguinte linha única do Bash. Não deve produzir nada se as chaves estiverem juntas. Aplique um pouco -qao diff nos scripts e o diff apenas define o código de retorno adequadamente.
@ MichaelHampton: agora eu entendo o seu comentário. "a resposta aceita" deve referir-se à pergunta sobre stackoverflow não esta pergunta ...
Michuelnik
11
@ Sirch: Eu pensei que a decisão de qual chave é privada e qual é pública é pura aleatória, pois as duas chaves são iguais. O que uma chave criptografa pode ser descriptografado apenas com a outra. E se uma chave pudesse ser obtida da outra, tudo isso não daria certo.
Michuelnik 25/09
11
@ Micheluelnik Você pode derivar a chave pública da chave privada. Você não pode derivar a chave privada da chave pública. Não estávamos falando sobre o material que ele criptografa.
Sirch
11
@ Michuelnik imho, a questão está fora do tópico sobre SO e sobre o tópico aqui (e / ou superusuário). imho, não deve ser marcado como duplicado e sinalizado para migração. Mas é abordado em ambos, então eu gosto do compartilhamento mais completo de informações.
Chris K
10
Enquanto o id_rsa.pub existir, ssh-keygen -y -e -f id_rsaele não verificará o id_rsa, mas apenas retornará o valor de id_rsa.pub. Então, por exemplo, se você echo 5 > id_rsaapagar a chave privada, faça o diff, o diff passará! Além disso, a execução em ssh-keygen -yef fooque foo não é uma chave válida (e não possui foo.pub correspondente) bloqueará a espera pela entrada do usuário; portanto, tenha cuidado ao usar isso em um script.
32
Dependendo de onde você obtém o arquivo de chave pública que está testando, a resposta aceita pode fornecer resultados positivos falsos. Isso ocorre 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 de opção -f, ele simplesmente repete (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 gera (e reformata) a chave no id_rsa.pub existente, seja ele qual for .
No meu caso, tenho que verificar se o par não foi corrompido. Então, decidi comparar o seguinte:
Isso realmente deve substituir a resposta aceita ou pelo menos superá-la em termos de votos.
Thomanski
Obrigado! Este comando não funciona com chaves com uma senha, não solicita isso de forma interativa. Eu extraí o conteúdo do comando two () para os arquivos e os diferenciei, isso funciona.
Yaroslav Nikitenko
5
Se eles estão em seu sistema local, ficar id_rsa.pubna sua $HOME/.ssh/authorized_keyse sshpara localhostusar a id_rsachave. Se funcionar, eles correspondem.
ssh -v
ajuda muito também.Respostas:
Prefiro o
ssh-keygen -y -e -f <private key>
caminho do que a resposta aceita de Como você testa um par de chaves DSA público / privado? no estouro de pilha.ssh-keygen -y -e -f <private key>
pega uma chave privada e imprime a chave pública correspondente, que pode ser diretamente comparada às suas chaves públicas disponíveis. (Dica: cuidado com os comentários ou as opções principais).(Como diabos está fazendo isso? Só espero que a chave pública seja codificada direta ou indiretamente na chave privada ...)
Eu mesmo precisava disso e usei a seguinte linha única do Bash. Não deve produzir nada se as chaves estiverem juntas. Aplique um pouco
-q
ao diff nos scripts e o diff apenas define o código de retorno adequadamente.fonte
ssh-keygen -y -e -f id_rsa
ele não verificará o id_rsa, mas apenas retornará o valor de id_rsa.pub. Então, por exemplo, se vocêecho 5 > id_rsa
apagar a chave privada, faça o diff, o diff passará! Além disso, a execução emssh-keygen -yef foo
que foo não é uma chave válida (e não possui foo.pub correspondente) bloqueará a espera pela entrada do usuário; portanto, tenha cuidado ao usar isso em um script.Dependendo de onde você obtém o arquivo de chave pública que está testando, a resposta aceita pode fornecer resultados positivos falsos. Isso ocorre 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 de opção -f, ele simplesmente repete (mas reformata) o que está no arquivo de chave pública associado.
Em outras palavras,
(aparentemente) gera o valor da chave pública e
simplesmente e gera (e reformata) a chave no id_rsa.pub existente, seja ele qual for .
No meu caso, tenho que verificar se o par não foi corrompido. Então, decidi comparar o seguinte:
com
Portanto:
Talvez isso não seja tão flexível, mas seja melhor para minhas necessidades. Talvez ajude alguém.
fonte
Se eles estão em seu sistema local, ficar
id_rsa.pub
na sua$HOME/.ssh/authorized_keys
essh
paralocalhost
usar aid_rsa
chave. Se funcionar, eles correspondem.fonte