Risposte:
L'impronta digitale si basa sulla chiave pubblica dell'host, in genere basata su "/etc/ssh/ssh_host_rsa_key.pub" Generalmente è per una facile identificazione / verifica dell'host a cui ci si sta connettendo.
Se l'impronta digitale cambia, la macchina a cui ci si sta connettendo ha cambiato la propria chiave pubblica. Questo potrebbe non essere una cosa negativa (succede dalla reinstallazione di ssh), ma potrebbe anche indicare che ci si sta connettendo a una macchina diversa nello stesso dominio / IP (succede quando ci si connette attraverso qualcosa come il bilanciamento del carico) o che si vengono presi di mira con un attacco man-in-the-middle, in cui l'attaccante sta in qualche modo intercettando / reindirizzando la tua connessione ssh per connettersi a un host diverso che potrebbe ficcare il tuo utente / pw.
In conclusione: se vieni avvisato di un'impronta digitale modificata, fai attenzione e ricontrolla che ti stai effettivamente connettendo all'host corretto tramite una connessione sicura. Anche se il più delle volte questo è innocuo, può essere un'indicazione di un potenziale problema
Vedi: 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
~/.ssh/known_hosts
. In questo modo, quando ti connetti al server, il tuo client SSH riconoscerà questo server, dal momento che hai salvato la sua chiave pubblica in known_hosts
. Quindi, in realtà non dovresti mai dire "sì" quando il client SSH ti dice "L'autenticità dell'host non può essere stabilita". È sempre necessario aggiungere in anticipo la chiave pubblica del server.
~/.ssh/known_hosts
file in anticipo e mai dire di sì quando il tuo client SSH ti dice "L'autenticità del client non può essere stabilita" o quando ti dice "La chiave pubblica del server è stata cambiato".
È possibile generare un'impronta digitale per una chiave pubblica usando in questo ssh-keygen
modo:
ssh-keygen -lf /path/to/key.pub
Esempio concreto (se si utilizza una chiave pubblica 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)
La prima parte (2048)
è la lunghezza della chiave in bit, la seconda parte (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)
è l'impronta digitale della chiave pubblica e la terza parte è la posizione del file della chiave pubblica stessa.
ssh-keygen -lf
che farà quello che vuoi.
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
. Mostra l'impronta digitale che viene mostrata anche negli accessi SSH a localhost.
ssh-keygen
segnalate sha256
. Al fine di ottenere le md5
impronte digitali ho corso ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
. #archlinux
ssh -o FingerprintHash=md5
o l'equivalente in ssh_config
e su cose che usano ssh
come scp
.
L'impronta digitale è MD5 sui dati binari all'interno della chiave pubblica con codifica 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
Il md5sum 6530389635564f6464e8e3a47d593e19 è l'impronta digitale visualizzata quando viene generata la chiave, solo senza i due punti di separazione.
Tuttavia, se hai a che fare con le impronte digitali che Amazon mostra nella console delle coppie di chiavi EC2, purtroppo potrebbe essere una bestia diversa . Se è una stringa esadecimale a 32 cifre, è l'impronta digitale della chiave pubblica SSH MD5 sopra riportata. Ma se ha 40 cifre esadecimali, in realtà è un'impronta digitale calcolata prendendo l'SHA1 della chiave privata in 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
awk '{print $2}' /path/to/keyfile.pub
o simile.
cat id_rsa.pub | cut -d' ' -f2 | base64 -d | md5sum
Se vuoi controllare un file chiave SSH per vedere se è lo stesso di quello che viene segnalato come "Distribuisci chiave" da github, questo è per te ...
Dall'URL privato: https://github.com/<username>/<repo_name>/settings/keys vedrai
Al 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)
Noterai che otterrai la stessa impronta digitale sia per le chiavi private che pubbliche.
Lo stesso comando può essere combinato con una funzionalità accurata di GitHub, che è il fatto che servono pubblicamente le chiavi pubbliche SSH degli utenti su https://github.com/<username>.keys
Ecco un one-liner che puoi usare per sfruttarlo.
$ 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
ssh-keygen -r host.name.com
Produrrà le impronte digitali per tutte le chiavi pubbliche configurate su un'istanza sshd.
Questi possono quindi essere inseriti nei record DNS SSHFP .