Si busca en la carpeta .ssh en su directorio de inicio, verá un archivoknown_hosts entre otros archivos.
[email protected]:~$ ls -l .ssh
total 16
-rwxr-xr-x 1 abhishek abhishek 618 Aug 30 16:52 config
-rw------- 1 abhishek abhishek 1766 Nov 12 2017 id_rsa
-rw-r--r-- 1 abhishek abhishek 398 Nov 12 2017 id_rsa.pub
-rw------- 1 abhishek abhishek 1 Sep 26 15:00 known_hosts
Aquí,id_rsa
es su clave SSH privada, id_rsa.pub es la clave SSH pública. El archivo de configuración en SSH se usa para crear perfiles para conectarse fácilmente a varios hosts. No es un archivo común y lo he creado específicamente.
El enfoque de este artículo está en el último archivo,known_hosts
. Es~/.ssh/known_hosts
El archivo es una parte vital de los archivos de configuración SSH del cliente.
Permítanme compartir más detalles al respecto.
¿Qué es el archivoknown_hosts en SSH?
El archivo unknown_hosts almacena las claves públicas de los hosts a los que accede un usuario. Este es un archivo muy importante que asegura que el usuario se está conectando a un servidor legítimo guardando su identidad en su sistema local. También ayuda a evitar laataques de hombre en el medio.
Cuando se conecta a un nuevo servidor remoto a través de SSH, se le pregunta si desea agregar los hosts remotos al archivo unknown_hosts.
El mensaje básicamente preguntaba si deseaba agregar los detalles del sistema remoto a su sistema.
The authenticity of host '194.195.118.85 (194.195.118.85)' can't be established.
ED25519 key fingerprint is SHA256:wF2qILJg7VbqEE4/zWmyMTSwy3ja7be1jTIg3WzmpeE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Si elige sí, la identidad del servidor se guarda en su sistema.
Evitar el hombre en el ataque medio
Imagina que te conectas a un servidor regularmente y lo agregas al archivo unknown_hosts.
Si hay un cambio en la clave pública del servidor remoto, su sistema notará este cambio gracias a la información almacenada en el archivoknown_hosts. Recibirá una alerta de inmediato sobre este cambio:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for xyz remote host has changed,and the key for the corresponding IP address xxx.yy.xxx.yy is unknown. This could either mean that DNS SPOOFING is happening or the IP address for the host and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
69:4e:bb:70:6a:64:e3:78:07:6f:b4:00:41:07:d8:9c.
Please contact your system administrator.
Add correct host key in /home/.ssh/known_hosts to get rid of this message.
Offending key in /home/.ssh/known_hosts:1
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
En tal caso, puede comunicarse con el administrador del servidor remoto antes de aceptar esta nueva clave. De esta manera, puede asegurarse de que el servidor o host remoto no se haya visto comprometido.
A veces, la clave de un servidor o host se altera intencionalmenteya sea por el administrador o debido a la reinstalación del servidor.
Cualquiera que sea el motivo de este cambio, primero deberá eliminar la clave anterior del archivoknown_hosts para volver a conectarse al servidor remoto. La próxima vez que se conecte a este servidor, el host del cliente creará una nueva clave de host para este servidor.
Gestión de múltiples usuarios autenticados
Como se mencionó anteriormente, una vez que un host de cliente se conecta con éxito a un servidor remoto, se agrega su archivo unknown_hosts con la clave pública del servidor.
A veces desea que un servidor se autentique para varios usuarios sin que se le solicite la verificación de la clave del servidor. Para exampleestá ejecutando algún tipo de herramienta de administración de configuración como Ansible y no desea que el host del cliente solicite la verificación de la clave del servidor.
Por lo tanto, si tiene varios usuarios, puede omitir el mensaje interactivo de SSH de tres maneras:
- Agregar manualmente la clave pública del servidor al archivo unknown_hosts de cada usuario.
- Usar una opción de línea de comandos
-o StrictHostKeyChecking=no
con cada cliente mientras accede al servidor a través de SSH (no recomendado) - Registre todos sus hosts en un archivo ssh_known_hosts maestro o primario y luego organice este archivo para todos los hosts de los clientes. Además, para que esto funcione, se puede usar el comando ssh-keyscan:
ssh-keyscan -H -t rsa ‘your-server-ip’ >> /etc/ssh/ssh_known_hosts
La siguiente captura de pantalla muestra cómo usar elStrictHostKeyChecking=no
opción:

El primer método de gestión de varios usuarios para autenticar un servidor es el más laborioso en comparación con los otros dos.
Obtener detalles del sistema remoto del archivo unknown_hosts
Esta no es una tarea fácil y directa.
Casi todos los sistemas Linux configuradosHashKnownHosts
parámetro a Sí en el archivo de configuración de SSH. Es una característica de seguridad.
Esto significa que los detalles en el archivo unknown_hosts están cifrados. Puedes ver números aleatorios pero no puedes hacer nada con ellos.
[email protected]:~$ cat .ssh/known_hosts
|1|yWIW17YIg0wBRXJ8Ktt4mcfBqsk=|cFHOrZ8VEx0vdOjau2XQr/K7B/c= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFR293PJnDCj59XxfqYGctrMo60ZU5IOjACZZNRp9D6f
|1|Ta7hoH/az4O3l2dwfaKh8O2jitI=|WGU5TKhMA+2og1qMKE6kmynFNYo= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmrxLW436AyBGyGCggl/j2qBCr782AVIvbiTEsWNBWLcWMKYAQpTdAXnaV4bBRqnk2NJg/60XDHKC2DF1tzx6ABWN/R6vcUAbulI9H1RUWpJ1AiDmFL84MvW2UukbpN5a6Lr+DvjclVqPxJRjQKr6Vy2K9oJgGKnHVcWSIHeAlW49kCCg5fIxF8stBTqJg0cRk6uxmcYVud1vh9a7SaZGK+jFZTB75RiHAVFuitHWpljecMxJRNYy/EhmmXrrvyU8pObVXlWlDd61uwExi4uEwNSY+Do7vR1y8svnt9mjTzzyM6MhT4sOcxWmNgdmw7bU/wPpie3dSjZMQeu2mQCSM7SG28dwjSyFPpanRsZKzkh0okAaCSItoNwl6zOf6dE3zt0s5EI6BPolhFAbT3NqmXRblxb7eV8rGEPf14iguHUkg6ZQr2OUdfeN1FYNMJ8Gb9RD159Mwjl4/jPIBdnXvt7zYct3XhPKm7Wxv4K/RWZE837C7mGQh2KEahWajdq8=
|1|NonAy25kVXL24U2mx6ZNxAY5m98=|ypf0IMpf3qq3vhrvUMprssOhODs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE3br/9jaZfdB+qBxiVEZBJMb4XQONwzV4tH1xeFZX/zkyws2eBHrVO9O5l9b6M6+gO6nBtCwAzzaeLOn6mo8GQ=
Puede obtener las entradas relacionadas de los hosts_conocidos si conoce el nombre de host o la dirección IP del sistema:
ssh-keygen -l -F <server-IP-or-hostname>
Pero si desea un solo comando que pueda enumerar todos los servidores y sus detalles en texto claro, eso no es posible.
Hay herramientas y scripts especialmente diseñados que se utilizan para descifrar los host_conocidos, pero eso no está dentro del alcance de un usuario normal como tú y yo.
Eliminar una entrada de los hosts_conocidos
Si desea eliminar una entrada específica del archivo unknown_hosts, puede hacerlo si conoce el nombre de host o la IP del sistema remoto.
ssh-keygen -R server-hostname-or-IP
Esto es mucho mejor que identificar las entradas relacionadas con un servidor y luego eliminarlas manualmente con el comando rm.
Conclusión
Tiene una mejor comprensión de la seguridad del sistema con el conocimiento adecuado de varios archivos de configuración de SSH. ‘Known_hosts’ es una parte vital de estos archivos.
Aquí solo he cubierto el archivo unknown_hosts; Si desea explorar más sobre SSH, consulte nuestra guía Primeros pasos con SSH en Linux.