Questão O que é uma impressão digital da chave SSH e como ela é gerada?


Eu sempre acho que recebo essa mensagem quando ssh em uma nova máquina:

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

O que significa? Todas as máquinas terão sempre a mesma impressão digital?

Como essas impressões digitais são geradas? De quais parâmetros eles dependem?


97


origem




Respostas:


A impressão digital é baseada na chave Public do Host, geralmente baseada em "/etc/ssh/ssh_host_rsa_key.pub" Geralmente é para facilitar a identificação / verificação do host ao qual você está se conectando.

Se a impressão digital mudar, a máquina à qual você está se conectando mudou sua chave pública. Isso pode não ser uma coisa ruim (acontece ao reinstalar o ssh), mas também pode indicar que você está se conectando a uma máquina diferente no mesmo domínio / IP (acontece quando você está se conectando a algo como balanceador de carga) ou estão sendo alvejados com um ataque man-in-the-middle, onde o invasor está de alguma forma interceptando / reencaminhando sua conexão ssh para conectar-se a um host diferente que poderia estar espionando seu usuário / pw.

Resumindo: Se você for avisado sobre uma impressão digital alterada, seja cauteloso e verifique se você está se conectando ao host correto por meio de uma conexão segura. Embora na maioria das vezes isso seja inofensivo, pode ser uma indicação de um possível problema

Vejo: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html
e: http://en.wikipedia.org/wiki/Public_key_fingerprint


45



"... seja cauteloso e verifique novamente se você está realmente se conectando ao host correto através de uma conexão segura" - pergunta estúpida, mas como você pode fazer isso facilmente? - Savara
@ Savara Quando você está se conectando a um servidor SSH que você não conectou antes, você deve solicitar a chave pública do servidor SSH do administrador do servidor. O administrador do servidor lhe dará um pedaço de texto. Você deve anexar este texto ao arquivo ~/.ssh/known_hosts. Dessa forma, quando você se conectar ao servidor, seu cliente SSH reconhecerá esse servidor, já que você salvou sua chave pública para known_hosts. Portanto, na verdade você deveria Nunca diga "sim" quando o cliente SSH disser "A autenticidade do host não pode ser estabelecida". Você deve sempre adicionar a chave pública do servidor de antemão. - Utku
@Savara Se você fizer isso, você saberá que algo suspeito está acontecendo quando seu cliente SSH lhe diz "A autenticidade do cliente não pode ser estabelecida" ou quando ele diz "A chave pública do servidor foi alterada". Portanto, você deve sempre adicionar a chave pública do servidor ao seu ~/.ssh/known_hosts arquivo de antemão e Nunca diga sim quando seu cliente SSH diz "A autenticidade do cliente não pode ser estabelecida" ou quando ele diz "A chave pública do servidor foi alterada". - Utku
Sim, eu estou totalmente ciente de como funciona a mecânica de ver impressões digitais SSH, mas uma grande porcentagem do tempo que você não tem a opção de obter a impressão digital através de outro canal. TOFU é, infelizmente, o melhor que costumamos ter. - Savara
Existe uma maneira de verificar a autenticidade mesmo depois de responder "sim"? - exchange


Você pode gerar uma impressão digital para uma chave pública usando ssh-keygen igual a:

ssh-keygen -lf /path/to/key.pub

Exemplo concreto (se você usar uma 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)

A primeira parte (2048) é o tamanho da chave em bits, segunda parte (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff) é a impressão digital da chave pública e a terceira parte é a localização do próprio arquivo de chave pública.


76



Você sabe como traduzir em 12: f8: 7e: 78: 61: b4: b2: e2: de: 24: 15: 96: 4e: d4: 72: 53 este formato dessa chave pública? - Kit Ho
@KitHo Não tenho certeza se entendi sua pergunta. Eu atualizei o exemplo, como eu acho ssh-keygen -lf vai fazer o que quiser. - Benjamin Oakes
Quando SSH-ing em uma nova máquina, o que se vê é não impressão digital de um pubkey de um usuário, mas a impressão digital de pubkey do host. Então, um melhor exemplo para o contexto da questão é ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub. Ele mostra a impressão digital que também é mostrada nos logins do SSH para o host local. - tanius
Minhas ssh-keygen relatado sha256 impressões digitais. A fim de obter md5 impressões digitais eu corri ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub. #archlinux - Justin C
(@JustinC) As versões do OpenSSH 6.8 (março de 2015) e alteradas para SHA256, exibidas em base64 em vez de hexadecimais, por padrão. Para o uso do cliente ssh -o FingerprintHash=md5 ou o equivalente em ssh_config e em coisas que usam ssh gostar scp. - dave_thompson_085


A impressão digital é o MD5 da chave pública codificada em Base64.

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|       +*..+*    |
|      =. +.=     |
|     . . .o .    |
|         o+   E  |
|        S= . + o |
|        . o o +  |
|           .   . |
|                 |
|                 |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19

O md5sum 6530389635564f6464e8e3a47d593e19 é a impressão digital exibida quando a chave é gerada, somente sem os dois pontos de separação.


No entanto, se você estiver lidando com as impressões digitais mostradas pela Amazon no console de pares de chaves do EC2, infelizmente isso pode ser uma fera diferente. Se for uma string hexadecimal de 32 dígitos, é a impressão digital da chave pública MD5 SSH padrão acima. Mas se são 40 dígitos hexadecimais, na verdade é uma impressão digital calculada tomando o SHA1 do chave privada no formato PKCS # 8:

$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58

56



Eu encontrei essa resposta útil no cenário a seguir. Seu sistema usa SHA1 para calcular a impressão digital, mas o seu amigo usa md5. Eu compartilhei uma impressão digital que era SHA1 e não correspondia ao MD5 gerado pelo sistema. Isso ajudou - obrigado! sed's | ^ ssh-rsa || ' /etc/ssh/ssh_host_rsa_key.pub | sed's | ==. * $ | == | ' | base64 -d | md5sum - Liczyrzepa
Isso é altamente relevante para entender por que essa impressão digital não coincide com as dos registros DNS SSHFP, porque eles usam resumos SHA-1 ou SHA-256. - neirbowj
@Liczyrzepa o campo publickey pode ou não ter '==' no final, dependendo do tipo de chave e bitsize; mais seguro e IMO mais fácil de usar awk '{print $2}' /path/to/keyfile.pub ou similar. - dave_thompson_085
Esta é a única resposta que explica como a impressão digital é calculada - greuze
No entanto, no Linux Mint, o comando é: cat id_rsa.pub | cut -d' ' -f2 | base64 -d | md5sum - greuze


ssh-keygen -r host.name.com

Produzirá as impressões digitais de todas as chaves públicas configuradas em uma instância sshd.

Estes podem ser colocados em DNS SSHFP registros.


0