servidor communications comandos ssh

ssh - communications - ¿Qué hay en realidad en hosts conocidos?



ssh server (2)

No tuve un directorio .ssh hasta que ejecuté

ssh [email protected]

Esto creó un directorio .ssh con un archivo known_hosts .

Tenía un texto como este en él.

foo.com,107.180.00.00 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuJfqSnraBz//Ux4j/hZpLv2eYUxNUgCk+9ClqoSgfcu4vXbWtUGSjo75UVQf+uguOeBnRLppJJ3mt0R5c/PPcawUGWfffk33t+biYcqra9xUcyfiGtO/Icko2L1J0EYTXM/8x8VK6UYFMfad2gltnZRa8Am50oHTXot1Df0RljUBxvh/UhmTJUrODpyrl2xY1OMWjM+S6uYCMNeSQGEpNfsWiCIStRnctMZSxiYJOLTSC4F2GF7B8pYFBn5rSwVHp17WCdO+4BZfwvH3HSSH8IWoyFhki+NlG912SEBJXcryvc0JPfAB9DTB4mRImjgrRT8vz5QeaCDrh8k4/A+U1fff

Pensé que esto podría haber sido una clave pública o privada extraída de mi servidor de alguna manera, pero no lo fue.

¿Qué es esto y para qué se utiliza?

Solo estoy tratando de aprender más sobre ssh y cómo funciona. Por ejemplo, en este caso no configuré la clave privada en la máquina local, por lo que solicitó una contraseña como se esperaba.

Investigación

Se supone que es una clave pública para el servidor de acuerdo con

https://security.stackexchange.com/questions/20706/what-is-the-difference-between-authorized-key-and-known-host-file-for-ssh


Este archivo es, efectivamente, su autoridad de certificación personal. Es la lista de todas las claves de host del servidor SSH que usted ha determinado que son precisas. Cada entrada en known_hosts es una línea grande con tres o más campos separados por espacios en blanco de la siguiente manera:

a. Uno o más nombres de servidor o direcciones IP, unidos por comas.

foo.com,107.180.00.00

segundo. El tipo de clave.

ssh-rsa

do. Los datos de la clave pública se codifican para permanecer dentro del rango ASCII.

AAAAB3NzaC1yc2EAAAABIwAAAQEAuJfqSnraBz//Ux4j/hZpLv2eYUxNUgCk+9ClqoSgfcu4vXbWtUGSjo75UVQf+uguOeBnRLppJJ3mt0R5c/PPcawUGWfffk33t+biYcqra9xUcyfiGtO/Icko2L1J0EYTXM/8x8VK6UYFMfad2gltnZRa8Am50oHTXot1Df0RljUBxvh/UhmTJUrODpyrl2xY1OMWjM+S6uYCMNeSQGEpNfsWiCIStRnctMZSxiYJOLTSC4F2GF7B8pYFBn5rSwVHp17WCdO+4BZfwvH3HSSH8IWoyFhki+NlG912SEBJXcryvc0JPfAB9DTB4mRImjgrRT8vz5QeaCDrh8k4/A+U1fff

re. Cualquier dato de comentario opcional.

¡¡También!! Este hilo puede ser de utilidad para usted:

https://security.stackexchange.com/a/20710


Para agregar a la respuesta anterior y su comentario, hay cuatro bloques de construcción para la sesión ssh

  1. Cifrado (claves simétricas derivadas después del cambio de clave por sesión)
  2. Integridad de los datos (MAC utilizando, por ejemplo, SHA, HMAC)
  3. Métodos de intercambio de claves
  4. Métodos de clave pública o métodos de clave de host

la negociación del algoritmo SSH implica una máquina de estado de intercambio de claves que comienza cuando se envía el mensaje SSH_MSG_KEXINIT junto con la lista de algoritmos.

El método de intercambio de claves o simplemente kex especifica las claves de sesión para el cifrado y la autenticación del host, las claves públicas ( ssh-rsa , ssh-dss ..) que se envían al cliente. El siguiente paso son los pasos básicos que se realizan para kex utilizando el algoritmo de intercambio de claves Diffie hellman

citando el RFC https://tools.ietf.org/html/rfc4253

Los siguientes pasos se utilizan para intercambiar una clave. En esto, C es el cliente; S es el servidor; p es una gran prima segura; g es un generador para un subgrupo de GF (p); q es el orden del subgrupo; V_S es la cadena de identificación de S; V_C es la cadena de identificación de C; K_S es la clave de host pública de S; I_C es el mensaje SSH_MSG_KEXINIT de C e I_S es el mensaje SSH_MSG_KEXINIT de S que se ha intercambiado antes de que comience esta parte.

  1. C genera un número aleatorio x (1 <x <q) y calcula e = g ^ x mod p. C envía e a S.

  2. S genera un número aleatorio y (0 <y <q) y calcula f = g ^ y mod p. S recibe e. Calcula K = e ^ y mod p, H = hash (V_C || V_S || I_C || I_S || K_S || e || f || K) (estos elementos están codificados de acuerdo con sus tipos; consulte a continuación) , y la firma s en H con su clave de host privado. S envía (K_S || f || s) a C. La operación de firma puede implicar una segunda operación de hashing.

  3. C verifica que K_S realmente sea la clave de host para S (por ejemplo, utilizando certificados o una base de datos local). C también se le permite aceptar la clave sin verificación; sin embargo, hacerlo hará que el protocolo sea inseguro contra ataques activos (pero puede ser deseable por razones prácticas a corto plazo en muchos entornos). C luego calcula K = f ^ x mod p, H = hash (V_C || V_S || I_C || I_S || K_S || e || f || K), y verifica la firma s en H.

La base de datos local mencionada en el paso tres en ciertos sistemas podría ser el archivo .ssh / known_hosts. Entonces, para responder a su pregunta, la clave pública es enviada al cliente por el anfitrión durante el intercambio de claves.

Los siguientes formatos de clave pública y / o certificado están definidos actualmente:

ssh-dss REQUIRED sign Raw Raw DSS Key

ssh-rsa RECOMENDADO firmar clave RSA sin procesar

pgp-sign-rsa OPCIONAL firma los certificados OpenPGP (clave RSA)

pgp-sign-dss OPCIONAL firma de certificados OpenPGP (clave DSS)