Estos dos archivos son utilizados por SSH pero para propósitos completamente diferentes, lo que podría explicar fácilmente su confusión.
Claves autorizadas
De forma predeterminada, SSH usa cuentas de usuario y contraseñas que son administradas por el sistema operativo host. (Bueno, en realidad administrado por PAM pero esa distinción probablemente no sea muy útil aquí). Lo que esto significa es que cuando intente conectarse a SSH con el nombre de usuario 'bob' y alguna contraseña que el programa del servidor SSH le preguntará al sistema operativo "Tengo un tipo llamado 'bob' que me dice que su contraseña es 'wonka'. ¿Puedo dejarlo entrar?" Si la respuesta es sí, entonces SSH te permite autenticarte y seguir tu camino alegre.
Además de las contraseñas, SSH también le permitirá usar lo que se llama criptografía de clave pública para identificarlo. El algoritmo de cifrado específico puede variar, pero generalmente es RSA o DSA , o más recientemente ECDSA . En cualquier caso, cuando configura sus claves, utilizando el programa ssh-keygen
, crea dos archivos. Una que es su clave privada y otra que es su clave pública. Los nombres son bastante autoexplicativos. Por diseño, la clave pública puede ser esparcida como semillas de diente de león en el viento sin comprometerte. La clave privada siempre debe mantenerse en la más estricta confidencialidad.
Entonces, lo que haces es colocar tu clave pública en el archivo authorized_keys
. Luego, cuando intentes conectarte a SSH con el nombre de usuario 'bob' y tu clave privada, se le preguntará al sistema operativo "Tengo este nombre de chico 'bob', ¿puedes estar aquí?" Si la respuesta es sí, SSH inspeccionará su clave privada y verificará si la clave pública en el archivo authorized_keys
es su par. Si ambas respuestas son afirmativas, se te permite ingresar.
Hosts conocidos
Al igual que la forma en que se usa el archivo authorized_keys
para autenticar a los usuarios, el archivo known_hosts
se usa para autenticar los servidores. Cada vez que se configura SSH en un servidor nuevo, siempre genera una clave pública y privada para el servidor, tal como lo hizo para su usuario. Cada vez que se conecta a un servidor SSH, le muestra su clave pública, junto con una prueba de que posee la clave privada correspondiente. Si no tiene su clave pública, su computadora la solicitará y la agregará al archivo known_hosts
. Si tiene la clave y coincide, entonces se conecta de inmediato. Si las teclas no coinciden, obtienes una gran advertencia desagradable. Aquí es donde las cosas se ponen interesantes. Las 3 situaciones en las que suele suceder una falta de coincidencia de claves son:
- La clave cambió en el servidor. Esto podría deberse a la reinstalación del OS o en algunos sistemas operativos la clave se vuelve a crear al actualizar SSH.
- El nombre de host o la dirección IP a la que se está conectando se utiliza para pertenecer a un servidor diferente. Esto podría ser la reasignación de direcciones, DHCP , o algo similar.
- Malicioso ataque del hombre en el medio está ocurriendo. Esto es lo más importante de lo que intenta protegerte la clave.
En ambos casos, known_hosts
y authorized_keys
, el programa SSH usa criptografía de clave pública para identificar al cliente o al servidor.