2012-05-08 14:22:34 +0000 2012-05-08 14:22:34 +0000
147
147

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

Descobri sempre que recebo esta mensagem quando eu ssh numa 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 são geradas estas impressões digitais? De que parâmetros dependem?

Respostas (5)

128
128
128
2012-07-24 16:26:09 +0000

Pode gerar uma impressão digital para uma chave pública usando ssh-keygen assim:

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

Exemplo concreto (se 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 comprimento da chave em bits, a 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 ficheiro da chave pública.

Nas versões mais recentes do OpenSSH, o SHA-256 codificado Base64 é mostrado em vez do MD5 hexadecimal. Para mostrar o hash estilo antigo, use

$ ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
74
74
74
2014-02-08 20:40:35 +0000

A impressão digital é o MD5 sobre os dados binários dentro da chave pública codificada 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 apresentada quando a chave é gerada, apenas sem os dois pontos de separação.


Contudo, se estiver a lidar com as impressões digitais que a Amazon mostra na consola EC2 Key Pairs infelizmente essa pode ser uma besta diferente . Se for um fio hexagonal de 32 dígitos, é a impressão digital de chave pública padrão MD5 SSH acima. Mas se tiver 40 dígitos hexadecimais, é de facto uma impressão digital calculada tomando o SHA1 da chave private key 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
69
69
69
2012-05-08 14:41:50 +0000

A impressão digital é baseada na chave pública do anfitrião, normalmente baseada em “/etc/ssh/ssh_host_rsa_key.pub” Geralmente é para fácil identificação/verificação do anfitrião a que se está a ligar.

Se a impressão digital mudar, a máquina a que se está a ligar mudou a sua chave pública. Isto pode não ser uma coisa má (acontece ao reinstalar o ssh), mas também pode indicar que está a ligar-se a uma máquina diferente no mesmo domínio/IP (acontece quando se está a ligar através de algo como um equilibrador de carga) ou que está a ser alvo de um ataque homem no meio, onde o atacante está, de alguma forma, a interceptar/roubar a sua ligação ssh para se ligar a um host diferente que pode estar a bisbilhotar o seu utilizador/pw.

Bottom line: se for avisado de uma mudança de impressão digital, seja cauteloso e verifique duas vezes se está de facto a ligar-se ao anfitrião correcto através de uma ligação segura. Embora a maior parte das vezes isto seja inofensivo, pode ser uma indicação de um potencial problema

Veja: 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

23
23
23
2019-03-29 21:52:44 +0000

Se quiser verificar um ficheiro de chave SSH para ver se é o mesmo que é reportado como “Deploy key” pelo github, isto é para si…

A partir do URL privado: https://github.com/\//<repo_name>/settings/keys you will see

No terminal:

$ ls -l id*
-rw------- 1 bruno staff 1675 Mar 29 17:03 id_rsa
-rw-r--r-- 1 bruno staff 416 Mar 29 17:03 id_rsa.pub

$ ssh-keygen -E md5 -lf id_rsa
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

$ ssh-keygen -E md5 -lf id_rsa.pub
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

You will note that you get the same fingerprint for both the private and public keys.

Esse mesmo comando pode ser combinado com uma funcionalidade do GitHub, que é o facto de servir publicamente as chaves públicas SSH dos utilizadores em https://github.com/\>.keys

Aqui está uma linha única que pode utilizar para tirar partido dela.

$ curl -sL https://github.com/RichardBronosky.keys | while read; do echo -e "\nkey #$((++i)):"; ssh-keygen -E md5 -lf - <<<"$REPLY"; echo $REPLY; done

key #1:
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJGT35gvsFveu+80qgurrLHId0h55E9jliM7Fo0mV9b7eg3EfyagkAcJUSMFkoov3HY4CW0yzOc7WlN57ABwvpRz1ioFDex0n0FkjoSEs5ROeT1OneRK6Bf6XnplgPuQ/LSSkv3kmK6I29R+YWi6TjDvLLoA5BrXJjOMfUv36jxWCDtk/5ZdhMZqhsMuDm06Jg5JBu6n5jQaZkmaIaunz7vOfwVG9LoCI+MYyIdo2S4VTva7Ee7jfAvgSUUgHTjhzsPO0/Ww5a/Kz2ehXW27aJxj/QPLfYR2LmTMbQKm3WpB8P1LjoiU7zjPoVoZ43a4P2JLUDidGKCd3eY5b5xewz

key #2:
2048 MD5:f7:98:f1:0b:73:c6:2a:21:00:7a:70:1d:0f:cf:d8:cc no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCQsZrjwKjB4WnE4SwVdDX5eEMxKzPHFBVKKpo9vvWUXRQwdTZy6iVOkyF26IPR+xDPzslzXOClKXUrWEh6La/EMpRwuMrWAbMIJFeDHOb56q4azgopoJmMJHo0yxGu0Ts4XszMACYRhlG6uK2AP5SYiOTp1zKPFjazXAdwLXyOvJurzy6KKuGJdSs/sj9+4uehgyRNOhehCSfg71tJJYwRvO2DDfLgaVEKOgZx58gEnJfhhz9D7rbvdZNhw/hCgtVNJaQF9Mdke2OPwWSo8i0/XNb9Bu/GRXqwMZrxDBhyzieocW40cwuzxWfzoi03aISdtQ1HtawH8+/sswviM1+B
1
1
1
2017-11-26 04:32:06 +0000
ssh-keygen -r host.name.com

Serão emitidas as impressões digitais para todas as chaves públicas configuradas numa instância sshd.

Estas podem então ser colocadas nos registos DNS SSHFP .