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.
PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
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 em ssh-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,
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:
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 seja melhor para minhas necessidades. Talvez ajude alguém.
Se eles estão em seu sistema local, ficar id_rsa.pub
na sua $HOME/.ssh/authorized_keys
e ssh
para localhost
usar a id_rsa
chave. Se funcionar, eles correspondem.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
ajuda muito também.