Eu tenho um arquivo PEM que adiciono a um ssh-agent em execução:
$ file query.pem
query.pem: PEM RSA private key
$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)
$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)
Como posso obter a impressão digital da chave (que vejo no ssh-agent) diretamente do arquivo? Eu sei que ssh-keygen -l -f some_key
funciona para chaves ssh "normais", mas não para arquivos PEM.
Se eu tentar ssh-keygen no arquivo .pem, obtenho:
$ ssh-keygen -l -f ./query.pem
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.
Essa chave começa com:
-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.
ao contrário de uma chave privada "regular", que se parece com:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.
ssh
openssl
certificate
fingerprint
Desconhecido
fonte
fonte
.ssh/id_rsa
arquivo gerado pelo OpenSSH usando todos os padrões É um arquivo PEM. As chaves privadas são codificadas por PEM por padrão. De fato, você pode usar chaves RSA geradas com o OpenSSL diretamente com o OpenSSH.ssh-keygen -l
não era possível ler um arquivo de chave privada, embora outras operaçõesssh-keygen
(essh*
) o façam. Mas quandossh-keygen
gera uma chave, ele grava o arquivo de chave privada, por exemplo,id_rsa
e um arquivo de chave pública correspondente, com o.pub
acréscimo deid_rsa.pub
. Mais velhossh-keygen -l
vai tentar adicionar.pub
ao nome do arquivo que você especificar e ler esse arquivo publickey.Respostas:
Se você deseja recuperar a impressão digital do seu arquivo de chave pública perdida, é possível recuperá-lo do arquivo de chave privada :
Então, você pode verificar a impressão digital pública:
Em alguns sistemas mais novos, isso imprime a impressão digital SHA256 da chave. Você pode imprimir a impressão digital MD5 da chave (o formulário de dois pontos) usando a opção
-E
:Ou como uma linha de comando :
fonte
A " Verificação da impressão digital do seu par de chaves " da AWS fornece duas linhas únicas que resolvem o problema, dependendo de como sua chave foi criada.
Se você criou seu par de chaves usando a AWS:
Ou, se você criou seu par de chaves com uma ferramenta de terceiros:
(impressões digitais redigidas na saída acima)
fonte
Aqui está um liner que deve fazer o que você deseja, sem exigir a criação de um arquivo de chave pública localmente.
Isso usa a cadeia bash here
<<<
para que o stdin esteja disponível como um arquivo regular (/dev/stdin
) em vez de um pipe, poisssh-keygen
só funcionará em um arquivo.A partir da versão 7.2 do openssh
ssh-keygen
suporta impressão digital a partir da entrada padrão:Observe que este comando será interrompido com chaves privadas que usam uma senha e não estão usando um agente. Ele deve funcionar com arquivos pem gerados pela AWS ou OpenStack que não usam senhas.
Consulte https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin para obter mais informações.
fonte
-l
também suporta a leitura de um arquivo de chave privada (mas não do stdin).Você não obtém a impressão digital do arquivo de chave privada, mas do arquivo de chave pública.
De fato, o ssh-keygen já lhe disse isso:
Execute-o contra a metade pública da chave e deve funcionar.
De um modo mais geral
Pense nisso: o motivo da impressão digital existir é que você pode identificar a chave pública. De fato, obter um hash da chave privada é um possível problema de segurança, além de inútil para o servidor (que nem sequer possui a chave privada em questão).
Depois de ter a chave pública, o processo é verificar se o cliente está retendo a metade privada correspondente. Como você já sabe quais chaves está tentando verificar, não precisa da impressão digital.
fonte
ssh-keygen
funciona em um arquivo de chave privada RSA que possui informações extras no início (veja minha postagem inicial), mas não nesta. .ssh-keygen -yf
faz isso.