Al especificar explícitamente el archivo de identidad a ssh:
ssh -i ./id_rsa ...
Tengo estas líneas en el seguimiento de depuración ssh:
debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
¿Significa que ssh-Generated también id_rsa
contiene un exponente público de RSA? id_rsa
el formato parece ser bastante explícito porque contiene una clave privada con su bloque "BEGIN PRIVATE KEY", por lo que "ofrecer clave pública" debe significar algo más que "enviar la clave pública al servidor".
EDITAR:
Para aclarar, quiero saber qué está sucediendo exactamente detrás de la línea de "oferta de clave pública". Si el cliente posee varias claves, todas se ofrecerán al servidor una por una.
Respuestas:
Para conectarse a un servidor SSH y autenticarse con su par de claves pública / privada, primero debe compartir su clave pública con el servidor.
esto se hace mediante la copia de la clave pública para su clave privada al servidor, y su adición al
~/ssh/authorized_keys
ya sea por copiar / pegar, copiarid_rsa.pub
a~/.ssh/authorized_keys
en el servidor o concat id_rsa.pub >> ~/.ssh/authorized_keys
, añadiendo a la lista.cuando se conecta, el servidor usa su clave pública para firmar un desafío, y su cliente usa su clave privada
id_rsa
para descifrar el desafío, volver a cifrarlo con el público del servidorhost key
y enviarlo de vuelta.el host verifica que descifró el desafío correctamente, descifrando su respuesta con su clave privada, y el cliente / host establece una conexión cifrada, basada en los datos compartidos, no en sus claves públicas / privadas.
en NINGÚN PUNTO en el intercambio está su clave privada, o la clave privada del host intercambiada o revelada entre sí. su clave pública se almacena en el servidor, pero es por eso que es una clave PÚBLICA.
fuente
ssh -i keyname
le está diciendo a su cliente ssh exactamente QUÉ clave planea usar para conectarse al servidor. si tiene una docena de claves en~/.ssh/
su cliente NO iterará a través de cada clave. buscará~/.ssh/id_rsa
,~/.ssh/id_dsa
potencialmente algunos otros nombres de archivo que están codificados en el cliente, o qué clave se especifica para ese host en~/.ssh/config
... larga historia corta; su cliente no está / ofreciendo / ninguna clave para el servidor.~/.ssh/authorized_keys
el host sabe cuál es el desafío y qué está buscando porque, una vez que una clave pública la desbloquea, sabe usar esa clave.La criptografía de clave pública / privada se basa en un sistema muy simple:
Tiene una clave pública que es capaz de realizar un cifrado unidireccional, y una clave privada que es capaz de descifrar. La clave pública se puede dar a todos en el mundo, y nadie podrá descifrar sus datos cifrados, aunque sí podrán cifrar datos que puede descifrar con su clave privada.
Entonces la respuesta a su pregunta es: "Su clave pública".
fuente
No creo que deba enviar la clave pública o privada en este momento. El cliente debe realizar una encriptación utilizando la clave privada en texto plano que el servidor ya conoce. El host puede descifrar este mensaje utilizando la clave pública, sabiendo que el único que podría haberlo cifrado correctamente es un cliente que posee la clave privada correspondiente, autenticando así al cliente.
Creo que lo dice
Offering public key: ./id_rsa
porque usa la clave privada (almacenada./id_rsa
) para realizar un cifrado en texto sin formato que es conocido por el servidor y luego el servidor usará la clave pública para descifrar este texto cifrado y confirmar que coincide con el texto sin formato. El./id_rsa.pub
cliente nunca debe necesitar el archivo de clave pública después de la generación de la clave inicial. Esto solo lo usa el servidor para el descifrado.fuente