Impressão digital da chave ssh do PEM

26

Eu tenho um arquivo PEM que eu adiciono a um agente ssh 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 o 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.

Esta 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.
    
por Unknown 28.10.2013 / 08:48

4 respostas

31

Se você quiser recuperar a impressão digital do seu arquivo de chave pública perdido, poderá recuperá-lo a partir do arquivo de chave privada :

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

Então você pode verificar a impressão digital pública:

$ ssh-keygen -lf path/to/store/public_key_file
    
por 10.07.2014 / 20:36
41

" Como verificar seu par de chaves A impressão digital "fornece dois liners que resolvem o problema, dependendo de como sua chave foi criada.

Se você criou seu par de chaves usando o AWS:

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

Ou, se você criou seu par de chaves com uma ferramenta de terceiros:

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(impressões digitais editadas na saída acima)

    
por 09.06.2015 / 15:09
6

Aqui está um folheto que deve fazer o que você quiser, sem requerer a criação de um arquivo de chave pública localmente.

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

Isso usa o bash aqui string <<< para ter stdin disponível como um arquivo regular ( /dev/stdin ) em vez de um pipe, pois ssh-keygen só funcionará em um arquivo.

A partir do Lançamento 7.2 do openssh ssh-keygen suporta impressão digital a partir da entrada padrão:

  • ssh-keygen (1): permite a impressão digital a partir da entrada padrão, por ex. "ssh-keygen -lf -"

Observe que esse comando quebrará com chaves privadas que usam uma frase secreta e não estão usando um agente. Ele deve funcionar com arquivos pem gerados pelo AWS ou OpenStack que não usam senhas.

Veja link para mais informações.

    
por 27.04.2016 / 05:13
2

Você não obtém a impressão digital do arquivo de chave privada, mas do arquivo de chave pública.

Na verdade, o ssh-keygen já lhe disse isso:

./query.pem is not a public key file.

Execute a metade da chave pública e isso deve funcionar.

Mais em termos gerais

Pense nisso: a razão pela qual a impressão digital existe é 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 ser 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 tem uma retenção na metade privada correspondente. Como você já sabe quais chaves está tentando verificar, não precisa da impressão digital.

    
por 28.10.2013 / 09:06