Calcular a impressão digital da chave RSA

903

Preciso fazer a auditoria de chave SSH para o GitHub, mas não sei como encontrar minha impressão digital de chave RSA. Originalmente, segui um guia para gerar uma chave SSH no Linux.

Qual é o comando que preciso digitar para encontrar minha impressão digital da chave RSA atual?

Zakoff
fonte
21
FWIW, continuo voltando a este post porque o github é onde vejo impressões digitais nas chaves e quero ter certeza de que estou usando a chave privada correspondente. talvez ele não garante um tag github uma vez que este post ajude que o inquérito github-relacionados?
hamx0r
4
@ hamx0r voltei para este post, porque gitlab também usa essas impressões digitais ...
Ray Foss
1
Eu vim para ele por causa de Travis, que também usa. : D
por Lundberg 26/01
4
Para todos aqueles que utilizam Linux que "manter a voltar para esta página", copiar este para o seu bashrc: function fingerprint() { ssh-keygen -lf $1 -E md5 }Então (depois de você fonte do bashrc) você pode obter uma impressão digital comfingerprint ~/.ssh/key_file
Jeff Diederiks
1
Para aqueles que tentam a função @JeffDiederiks e se perguntam por que não está funcionando, as funções do Bash precisam de um rastro ;no corpo, então use-o function fingerprint() { ssh-keygen -lf $1 -E md5; }.
Tjjfvi 30/07/19

Respostas:

1261

Execute o seguinte comando para recuperar a impressão digital SHA256 da sua chave SSH ( -lsignifica "lista" em vez de criar uma nova chave, -fsignifica "nome do arquivo"):

$ ssh-keygen -lf /path/to/ssh/key

Por exemplo, na minha máquina, o comando que executei foi (usando a chave pública RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Para obter o formato de impressão digital do GitHub (MD5) com versões mais recentes do ssh-keygen, execute:

$ ssh-keygen -E md5 -lf <fileName>

Informações sobre bônus:

ssh-keygen -lftambém funciona em known_hostse authorized_keysarquivos.

Para encontrar a maioria das chaves públicas nos sistemas Linux / Unix / OS X, execute

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(Se você quiser ver dentro das propriedades de outros usuários, precisará ser root ou sudo.)

O ssh-add -lé muito semelhante, mas lista as impressões digitais das chaves adicionadas ao seu agente. (Os usuários do OS X observam que o SSH mágico sem senha via Keychain não é o mesmo que usar o ssh-agent.)

Marvin Pinto
fonte
5
Como encontro qual é o caminho?
pal4life
4
Como o seu exemplo de impressão digital hexadecimal tem 32 dígitos, acredito que seria uma impressão digital MD5, correto? Ao contrário de uma impressão digital de 40 dígitos, que indicaria SHA1
culix
8
Em sistemas que não são do Ubuntu, o arquivo relevante pode estar em / etc / ssh, por exemplo, /etc/ssh/ssh_host_rsa_key.pub
Zorawar
12
Vale notar que a impressão digital deve ser a mesma para as duas chaves em um par de chaves pública / privada; portanto, a impressão digital de .ssh/id_rsadeve ser a mesma que a de .ssh/id_rsa.pub. Portanto, você pode usar qualquer um deles (e, se você gosta de mim e adora o preenchimento de guias, o trabalho leva menos 2 pressionamentos de tecla. Eficiência!).
Parthian Shot
25
uso ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubse você não quer que o padrão sha256 saída
user8162
676

Os comandos SSH mais recentes listam as impressões digitais como uma chave SHA256 .

Por exemplo:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

Se você precisar compará-lo com uma impressão digital antiga, também precisará especificar a utilização da função de hash de impressão digital MD5 .

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

Também disponível: -E sha1

Atualizar ... SIM ... sim ... eu sei ... as chaves DSA para SSH não devem mais ser usadas, a chave RSA mais antiga ou as chaves eclípticas mais recentes devem ser usadas.

Para aqueles 'administradores' que continuam editando o comando que usei acima. PARE DE MUDAR! Você faz o comando e a saída resultante incompatíveis!

anthony
fonte
6
Vale mencionar aqui que você pode dizer sshpara mostrar a impressão digital MD5 antiga do servidor usando ssh -o FingerprintHash=md5 example.org, conforme mencionado nesta resposta . (Eu só estava procurando por isso, e esta resposta me levou a que um, então eu acho que os outros possam ter uma experiência similar.)
Jonathan Y.
25
Esta resposta é mais útil para aqueles que desejam comparar suas chaves com o que github.com mostra (ou seja, o MD5 formatado em hexadecimal)
hamx0r
2
Também é muito útil para comparar com o que a massa apresentará.
Pjcard
27

Para ver sua chave no Ubuntu, basta digitar o seguinte comando no seu terminal:

ssh-add -l

Você obterá uma saída como esta: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

Se, no entanto, você receber um erro como; Could not open a connection to your authentication agent.
Então isso significa que o ssh-agent não está sendo executado. Você pode iniciar / executá-lo com: ssh-agent bash(graças a @Richard nos comentários) e depois executar novamentessh-add -l

Komu
fonte
5
Se você não estiver no Ubuntu, poderá obter este infelizmente "Não foi possível abrir uma conexão com o seu agente de autenticação".
Rogerdpack # 23/13
1
Isso funciona apenas se você tiver o agente de autenticação em execução.
Rufflewind
Para colocar o agente de autenticação em execução, você pode usar ssh-agent bashe prosseguir com a vida. Na vida como sempre; ssh-agentnão é garantido como uma implementação consistente em todos os sistemas.
Richard Kenneth Niescior 10/03/16
Outra dica para linux; A opção -F (impressão digital de despejo) do ssh-keygen-g3 exibirá a impressão digital da chave: $ ssh-keygen-g3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/…
AnneTheAgile
18

Um par de chaves (as chaves privada e pública) terá a mesma impressão digital; portanto, caso não consiga lembrar qual chave privada pertence a qual chave pública, encontre a correspondência comparando as impressões digitais.

A resposta mais votada por Marvin Vinto fornece a impressão digital de um arquivo de chave SSH público . A impressão digital da chave SSH privada correspondente também pode ser consultada, mas requer uma série mais longa de etapas, como mostrado abaixo.

  1. Carregue o agente SSH, se você não tiver feito isso. A maneira mais fácil é invocar

    $ ssh-agent bash
    

    ou

    $ ssh-agent tcsh
    

    (ou outro shell que você usa).

  2. Carregue a chave privada que você deseja testar:

    $ ssh-add /path/to/your-ssh-private-key
    

    Você será solicitado a digitar a senha se a chave estiver protegida por senha.

  3. Agora, como outros disseram, digite

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...é a impressão digital que você procura. Se houver várias chaves, várias linhas serão impressas e a última linha conterá a impressão digital da última chave carregada.

  4. Se você deseja parar o agente (ou seja, se você invocou a etapa 1 acima), basta digitar `exit 'no shell e voltará ao shell antes do carregamento do agente ssh.

Não adiciono novas informações, mas espero que esta resposta seja clara para usuários de todos os níveis.

Wirawan Purwanto
fonte
O primeiro parágrafo é falso ssh-add -le ssh-keygen -lretorna a mesma impressão digital para um determinado par de chaves. Além disso, deve ser uma letra minúscula -l, não maiúscula.
Albertas Agejevas
Não contesto isso ssh-add -le ssh-keygen -ldevolvo a mesma impressão digital para um determinado par de chaves. Mas não entendo o que havia de errado com minhas declarações originais no primeiro parágrafo. Eu adicionei uma frase para esclarecer.
Wirawan Purwanto
1
É mais simples apontar ssh-keygen para uma chave, em vez de iniciar o agente, carregar a chave e obter a impressão digital.
Albertas Agejevas
1
Se você possui apenas a chave privada, não precisa necessariamente executar ssh-agent. Supondo PRIVKEYque foi definido como o arquivo de chave privada e PUBKEYcomo o arquivo de chave pública (inicialmente inexistente), faça: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"para regenerar a chave pública SSH, ssh-keygen -E md5 -l -v -f "${PUBKEY}"se você deseja o hash MD5 ou apenas ssh-keygen -l -v -f "${PUBKEY}"se deseja o hash SHA-256 (SHA-256 sendo o padrão agora).
David Tonhofer
12

A maneira mais rápida se suas chaves estiverem em um agente SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

Cada chave no agente será impressa como:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)
cmcginty
fonte
3
Precisava de uma maneira mais rápida de combinar minhas chaves com as da minha conta do GitHub e essa resposta me ajudou a fazer exatamente isso.
evanjs
11

Reproduzindo conteúdo dos fóruns da AWS aqui, porque achei útil para meu caso de uso - eu queria verificar quais das minhas chaves combinavam com as que havia importado para a AWS

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

Onde: - primary.pemé a chave privada para verificar

Phil
fonte
9
$ ssh-add -l 

também funcionará no Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite).

Ele também suporta a opção -Ede especificar o formato da impressão digital; caso seja necessário o MD5 (geralmente usado, por exemplo, pelo GitHub), basta adicionar -E md5ao comando.

geeklizzard
fonte
+1 para a resposta mais simples. A partir man ssh-addda opção -lestá "Lista as impressões digitais de todas as identidades atualmente representadas pelo agente"
XavierStuvw 16/08/18
8

No Windows, se você estiver executando o PuTTY / Pageant, a impressão digital é listada quando você carrega sua chave PuTTY (.ppk) no Pageant. É bastante útil caso você esqueça qual deles está usando.

Digite a descrição da imagem aqui

Dmitri R117
fonte
3
Obrigado, às vezes, o pessoal do Linux esquece o Windows, principalmente porque o OP mencionou a massa.
Jmons 29/03
@ DmitriR117, por que você pintou uma chave pública preta, como pode ser conhecida no mundo inteiro?
Michu93 16/10/19
8

Esta é a função shell que eu uso para obter minha impressão digital com chave SSH para criar gotículas DigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

Coloque-o em sua ~/.bashrcfonte, e então você poderá obter as impressões digitais da seguinte maneira:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9
Bryce Guinta
fonte
2

Se o seu agente SSH estiver em execução, é

ssh-add -l

para listar impressões digitais RSA de todas as identidades ou -Lpara listar chaves públicas.

Se o seu agente não estiver em execução, tente:

ssh-agent sh -c 'ssh-add; ssh-add -l'

E para suas chaves públicas:

ssh-agent sh -c 'ssh-add; ssh-add -L'

Se você receber a mensagem: ' O agente não tem identidades. ', então você deve gerar sua chave RSA ssh-keygenprimeiro.

kenorb
fonte
Eu instalei o openssh e tentei conectar-me ao servidor usando o putty. Ele está apresentando uma impressão digital de chave ssh-ed25519 256, mas estou recebendo a mensagem "sem identidade". Você sabe onde essa chave pode ser encontrada e listada? Existe uma desvantagem em usar essa chave, em vez de gerar uma nova chave RSA?
Lordcheeto 25/10
Encontrei em /etc/ssh/ssh_host_ed25519_key.pub. A segunda parte da pergunta permanece: existe alguma desvantagem em usar essa chave gerada automaticamente?
Lordcheeto 25/10
1

Às vezes, você pode ter um monte de chaves em seu ~/.sshdiretório e não sabe qual corresponde à impressão digital mostrada pelo GitHub / Gitlab / etc.

Veja como mostrar os nomes de arquivos das chaves e as impressões digitais MD5 de todas as chaves do seu ~/.sshdiretório:

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(Para saber ofind que os parâmetros significam, consulte esta resposta sobre o comando .

Observe que os arquivos públicos / privados que pertencem a uma chave têm a mesma impressão digital, portanto, você verá duplicados.

Dan Dascalescu
fonte
0

O Google Compute Engine mostra a impressão digital da chave do host SSH na saída serial de uma instância do Linux. A API pode obter esses dados do GCE e não há necessidade de efetuar login na instância.

Não encontrei em nenhum outro lugar, exceto na saída serial. Eu acho que a impressão digital deve estar em algum lugar mais amigável para programadores.

No entanto, parece que isso depende do tipo de uma instância. Estou usando instâncias do Debian 7 (Wheezy) f1-micro.

re Paul
fonte
-1

Para verificar um servidor SSH remoto antes da primeira conexão, consulte www.server-stats.net/ssh/ para ver todas as chaves SHH do servidor e também quando a chave é conhecida.

Isso não é como um certificado SSL, mas é definitivamente um procedimento obrigatório antes de conectar-se a qualquer servidor SSH pela primeira vez.

p974
fonte
4
O usuário não estava procurando um site de terceiros, mas uma linha de comando do próprio sistema operacional.
Andrew Barber
Portanto, é basicamente o plug-in de convergência , exceto o SSH em vez do SSL, e com apenas um notário (um tanto duvidoso). Isso soa certo?
Parthian Shot
-1

No Fedora eu faço o locate ~/.sshque me diz que as chaves estão em

/root/.ssh
/root/.ssh/authorized_keys
Jesse William Mac Dougall
fonte
1
O OP parece saber onde encontrar suas chaves (não é isso, ~/.ssh/id*.pubé) e deseja obter suas impressões digitais.
Gert van den Berg