GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué comando uso para ver cuál es la huella digital de la clave ECDSA de mi servidor?

Comandos utilizados

  • Mostrar ascii-art de la clave de host pública almacenada en el servidor (para hacerse en el lado del servidor, al que se conecta a través de ssh):

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

    -l :muestra la huella digital del archivo de clave pública especificado.

    -v :visual (arte ascii)

    -f :archivo

  • Mostrar ascii-art de la clave de host pública del servidor remoto (para hacerse en el lado del cliente, desde el que se conecta a través de ssh):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o :opción

    clave de host visual :visual (arte ascii)

    FingerprintHash :algoritmo hash para usar

Qué hacer para verificar la autenticidad de un host/servidor

Primero, 1. debe hacerse localmente en el servidor (al que desea conectarse a través de ssh):le dará un primer ascii-art. Imprímelo o hazle una foto.

Segundo, 2. debe hacerse en la primera conexión SSH; mostrará un segundo ascii-art. Si el ascii-art es el mismo, entonces puede responder al "¿confío?" pregunta (es decir, Are you sure you want to continue connecting (yes/no) ).

Ejemplo

  • Lado del servidor
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6   (ECDSA)
+--[ECDSA  256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+-----------------+
  • Lado del cliente
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)? 

Alguna explicación más

El primer comando mostrará el arte ascii correspondiente a la huella digital del archivo que proporcionó como entrada. El archivo que das como entrada es el host público clave del servidor. Cuando un cliente se conecta (no solo por primera vez), el servidor enviará su clave de host pública. Esta clave de host pública se buscará en ~/.ssh/known_hosts . Si la clave pública está en el archivo, entonces está bien:se conoce el host (servidor), por lo que pasamos al siguiente paso para autenticar al usuario (la autenticación del usuario no se describe en esta publicación). Si la clave pública no está en el archivo, el cliente calculará la huella digital de esta clave de host pública con un algoritmo hash (un algoritmo hash diferente dará una huella digital diferente). Se muestra esta huella digital previamente calculada (junto con el arte ascii si se proporciona la opción correspondiente) y tendrá que responder sí o no dependiendo de si reconoce esta huella digital o no (esta huella digital es la imagen/hash de la clave de host pública del servidor). Si dice que sí, la clave pública del servidor (no su huella digital) se agregará al archivo ~/.ssh/known_hosts .

Podemos notar que ~/.ssh/known_hosts está debajo de su directorio de inicio (~), porque usted confía en este host (servidor), pero es posible que un usuario diferente no confíe en lo mismo que tú. Además, la clave pública de host del servidor no depende del usuario, por lo que se almacena en /etc/ssh/ .

El segundo comando mostrará la huella digital y el arte ascii de la clave pública recibida del host_server_to_connect (según el algoritmo hash dado en opciones). Es lo mismo que hacer solo ssh, pero con más opciones visuales, por lo que la conexión continuará de la misma manera que una conexión ssh normal.


En mi sistema, necesito especificar una clave MD5 en lugar del SHA256 predeterminado:

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

Esto generó una cadena en un formato que coincidía con el error que vi en el cliente.


Espera, lo encontré. Ejecute el comando:

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

Con un ssh reciente (OpenSSH_6.0p1, OpenSSL 1.0.0j 10 de mayo de 2012), lo escribí así:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=

Notas:

  • si su sshd se ejecuta en un puerto personalizado, agregue '-p portNumber ' al ssh-keyscan comando)
  • ssh-keyscan escribe en stderr , no stdout (!), de ahí el bash redirección '2>&1 ' (que puede variar dependiendo de su caparazón)

Esa es la línea que agregué a mi ~/.ssh/known_hosts para autorizar solicitudes ssh de localhost para mis pruebas (principalmente para gitolite, que usa ssh).

Daniel Böhmer confirma en los comentarios:

  • ssh-keyscan proporciona la(s) clave(s) pública(s) completa(s) del servidor SSH
  • la salida de ssh-keygen es casi idéntico al formato de los archivos de clave pública.
    Simplemente elimine la primera columna (dirección IP o nombre de host) y guárdela o canalícela a ssh-keygen -l que presenta la huella dactilar.

Daniel agrega:

Mostrar huellas dactilares de todas las claves públicas del servidor almacenadas en ~/.ssh/know_hosts :

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done

Linux
  1. Use la terminal de Linux para ver qué archivos hay en su computadora

  2. Cómo usar el comando grep de Linux

  3. Cómo usar el comando de historial en Linux

  4. ¿Cómo usar el comando basename?

  5. Cómo usar el comando ssh-keygen en Linux

¿Qué es el comando Watch de Linux + ejemplos?

Cómo usar el comando ping de Linux

¿Qué es el comando SSH y cómo usar SSH para conectarse a un servidor remoto?

¿Qué es el comando matar en Linux?

¿Qué es la vulnerabilidad de Logjam?

Uso del comando grep en Linux