La chiave pubblica per SSH su Internet differisce da una chiave per SSH sulla LAN

6

Ho un Raspberry Pi e posso accedervi tramite SSH (autenticazione tramite password utente) quando il mio laptop si trova nella stessa rete. Ora voglio accedervi da Internet.

Ho già impostato il mio router per inoltrare la porta al mio Raspberry Pi e ho installato fail2ban per (si spera) di rendere impossibile la password tramite la forza bruta.

La cosa strana è che ottengo una chiave diversa quando accedo al Pi su Internet invece che via LAN:

christoph@christoph-laptop-14-04:~$ ssh-keygen -H -F 192.168.1.92
# Host 192.168.1.92 found: line 9 type ECDSA
|1|Zz8zhCYwRu7jKa/bcUTnw/BzGmo=|m2E+0RwiVXcr8lAxbK/W13ZmZUA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAgUNwcHmVBowUoKvi9iLtoKifh/9qKAj6BNfQsYzYuoXtlYEnTUVLn4XpMYJ9+TMwL23ZDnmJuz8noKK3rFrYg=
christoph@christoph-laptop-14-04:~$ ssh-keygen -H -F [my global IP]
# Host 185.5.10.87 found: line 10 type ECDSA
|1|kEE5HDC1uBkqDN3SpQ8yFvwdj0A=|iDaNuB2Y8d3kIFPqFoXjrERRJ/0= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAgUNwcHmVBowUoKvi9iLtoKifh/9qKAj6BNfQsYzYuoXtlYEnTUVLn4XpMYJ9+TMwL23ZDnmJuz8noKK3rFrYg=

Tutto tranne l'inizio è lo stesso. Allora perché l'inizio è diverso? L'indirizzo IP è codificato in questo o qualcosa del genere?

Un'altra cosa che mi confonde è che quando c'era una chiave diversa prima (ovviamente non riesco a connettermi perché la chiave è cambiata ma anche) Mi viene mostrato questo:

ECDSA key fingerprint is ed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cd

Riesco a capire quello del mio laptop tramite:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

e viene fornito nello stesso formato. Ma quando scrivo il mio Pi e eseguo lo stesso comando, l'output è:

256 SHA256:Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izE root@christoph-pi (ECDSA)

che non sembra avere nulla a che fare con ed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cd .

Per prima cosa ho pensato che forse Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izE fosse una codifica base 64 per ed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cd che sembra essere in codice esadecimale con ogni byte separato dal prossimo con due punti, ma la lunghezza di Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izE è 43 che non è è un multiplo intero di 4, quindi non è base64. Allora, cos'è?

    
posta UTF-8 31.03.2016 - 01:37
fonte

2 risposte

2

The weird thing is that I get a different key when accessing the Pi over the internet instead of via LAN:

La pagina manuale per sshd descrive il formato del tuo file known_hosts :

SSH_KNOWN_HOSTS FILE FORMAT

Each line in these files contains the following fields: markers (optional), hostnames, [...]. The fields are separated by spaces.

Se siamo arrivati alla prima risposta. Il primo campo è hostname , che è ovviamente diverso quando ti colleghi dall'esterno o dall'interno, come proposto nella tua domanda.

Inoltre possiamo leggere

Alternately, hostnames may be stored in a hashed form which hides host names and addresses should the file's contents be disclosed. Hashed hostnames start with a ‘|’ character. Only one hashed hostname may appear on a single line [...]

Sì, i tuoi nomi host / indirizzi IP sono sottoposti a hash.

But when I ssh into my Pi and execute the same command [...]

Le nuove versioni utilizzano gli hash SHA-256 anziché l'MD5 obsoleto. Puoi forzare la nuova versione a generare la vecchia impronta digitale utilizzando:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub

La conversione tra questi due formati è possibile, ma non utile. Usare ssh-keygen direttamente come ho proposto sopra è consigliato soluzione.

Puoi generare un'impronta digitale dalla chiave pubblica memorizzata nel tuo file known_hosts in un modo simile a questo:

ssh-keygen -l -f <( ssh-keygen -H -F 192.168.1.92 | tail -n 1 | cut -d" " -f 2,3)
    
risposta data 31.03.2016 - 20:56
fonte
1

Il lato sinistro dell'output di ssh-keygen -H -F 192.168.1.92 è il hash dell'indirizzo IP. Se dovessi eseguire il comando senza l'opzione -H otterresti qualcosa di simile a:

christoph@christoph-laptop-14-04:~$ ssh-keygen -F 192.168.1.92
# Host 192.168.1.92 found: line 9 type ECDSA
192.168.1.92 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAgUNwcHmVBowUoKvi9iLtoKifh/9qKAj6BNfQsYzYuoXtlYEnTUVLn4XpMYJ9+TMwL23ZDnmJuz8noKK3rFrYg=

Questo mostra l'indirizzo IP sulla sinistra. Quando viene eseguito con l'opzione -H , il comando mostra invece un hash dell'indirizzo IP, che ovviamente sarà diverso per ciascun host.

La formattazione dell'output di ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub può variare se stai usando versioni diverse di ssh-keygen.

La mia macchina CentOS ha lo stesso formato del tuo Raspberry Pi, mentre il mio Pi ha lo stesso formato delimitato da due punti del tuo laptop. I valori di output effettivi sono ovviamente diversi perché input al comando sono diverse chiavi pubbliche.

    
risposta data 31.03.2016 - 09:02
fonte