La clave pública para SSH a través de Internet difiere de una clave para SSH a través de la LAN

6

Tengo una Raspberry Pi y puedo acceder a ella a través de SSH (autenticación mediante contraseña de usuario) cuando mi computadora portátil está en la misma red. Ahora quiero acceder a él a través de internet.

Ya configuré mi enrutador para reenviar el puerto a mi Raspberry Pi e instalé fail2ban para (con suerte) hacer que descifrar la contraseña a través de fuerza bruta sea inviable.

Lo extraño es que obtengo una clave diferente al acceder al Pi a través de Internet en lugar de a través de 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=

Todo menos el principio es el mismo. Entonces, ¿por qué el comienzo es diferente? ¿La dirección IP está codificada en esto o algo así?

Otra cosa que me confunde es que cuando antes había una clave diferente (obviamente no puedo conectarme porque la clave cambió, pero también) se me muestra esto:

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

Puedo averiguar el de mi portátil a través de:

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

y viene en el mismo formato. Pero cuando ssh en mi Pi y ejecuto el mismo comando, la salida es:

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

que no parece tener nada que ver con ed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cd .

Primero pensé que tal vez Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izE era una codificación de base 64 para ed:47:24:c6:4e:c1:ca:99:d9:77:59:8f:01:12:85:cd que parece estar en codificación hexadecimal con cada byte separado del siguiente con dos puntos, pero la longitud de Npy6IbI8vDd4V3iCOcIVEsF4j2bsf9vbWcsf1ti8izE es 43, que es No es un múltiplo entero de 4, por lo que no es base64. Entonces, ¿qué es?

    
pregunta UTF-8 31.03.2016 - 01:37
fuente

2 respuestas

2
  

Lo extraño es que obtengo una clave diferente al acceder al Pi a través de Internet en lugar de a través de LAN:

La página del manual para sshd describe el formato de su archivo known_hosts :

  

SSH_KNOWN_HOSTS FORMATO DE ARCHIVO

     

Cada línea en estos archivos contiene los siguientes campos: marcadores (opcionales), nombres de host , [...]. Los campos están separados por espacios.

Llegamos a la primera respuesta. El primer campo es hostname , que obviamente es diferente cuando te conectas desde afuera o desde adentro, como se propuso en tu pregunta.

Además podemos leer

  

Alternativamente, los nombres de host pueden almacenarse en forma de hash que oculta los nombres y direcciones de host en caso de que se divulgue el contenido del archivo. Los nombres de host de hash comienzan con un carácter "|". Solo un nombre de host con hash puede aparecer en una sola línea [...]

Sí, sus nombres de host / direcciones IP están ocultos.

  

Pero cuando ssh en mi Pi y ejecuto el mismo comando [...]

Las nuevas versiones utilizan hashes SHA-256 en lugar del MD5 obsoleto. Puede forzar que la nueva versión le genere la huella dactilar anterior usando:

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

La conversión entre estos dos formatos es posible, pero no útil. El uso de ssh-keygen directamente como propuse anteriormente es una solución recomendada.

Puede generar huellas digitales a partir de la clave pública almacenada en su archivo known_hosts de esta manera:

ssh-keygen -l -f <( ssh-keygen -H -F 192.168.1.92 | tail -n 1 | cut -d" " -f 2,3)
    
respondido por el Jakuje 31.03.2016 - 20:56
fuente
1

El lado izquierdo de la salida de ssh-keygen -H -F 192.168.1.92 es el hash de la dirección IP. Si ejecutara el comando sin la opción -H , obtendría algo similar 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=

Esto muestra la dirección IP a la izquierda. Cuando se ejecuta con la opción -H , el comando muestra un hash de la dirección IP, lo que obviamente será diferente para cada host.

El formato de salida de ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub puede variar si está utilizando versiones diferentes de ssh-keygen.

Mi máquina CentOS ofrece el mismo formato que tu Raspberry Pi, mientras que mi Pi ofrece el mismo formato delimitado por dos puntos que tu computadora portátil. Los valores de salida reales son obviamente diferentes porque ingresan al comando con diferentes claves públicas.

    
respondido por el garethTheRed 31.03.2016 - 09:02
fuente

Lea otras preguntas en las etiquetas