¿Por qué SSH agrega una entrada conocido_host para una dirección IP?

18

Tengo un host llamado nms.example.org. En mi /etc/ssh/ssh_known_hoststengo una entrada para el host con la clave RSA. Esta entrada y todas las demás entradas son administradas por mi sistema de administración de configuración.

nms.example.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZqfmVPs/XqTS...

También tengo una entrada en mi /etc/ssh/ssh_configpara el host específico que configura el alias de la clave del host. Lo que si entiendo todo correctamente, esto significa que solo el nms.example.orgdebería importar.

Host nms.example.org nms.example nms
    HostKeyAlias nms.example.org
    HostName nms.example.org

¿Por qué entonces, cuando me conecto desde un cliente, ssh todavía parece pensar que necesita agregar una clave a mis conocidos_hosts por usuario con la IP del host?

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/zoredache/.ssh/config
debug1: /home/zoredache/.ssh/config line 61: Applying options for *
debug1: /home/zoredache/.ssh/config line 71: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 84: Applying options for nms
debug1: /etc/ssh/ssh_config line 363: Applying options for *
debug1: Connecting to nms.example.org [104.236.190.144] port 22.
debug1: Connection established.
debug1: identity file /home/zoredache/.ssh/zoredache-20140204.id_rsa type 1
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: Permanently added the RSA host key for IP address '192.0.2.144' to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
...

SSH sabe que mi host es válido (ver:) Host 'nms.example.org' is known and matches the RSA host keyentonces, ¿por qué agrega la clave de la IP a un perfil de usuario?

Esto es extremadamente irritante, porque cuando reinstalo una máquina, mi sistema de administración de configuración maneja muy bien la recolección y distribución de las claves de host a todo el sistema. Pero habrá estas claves conflictivas asociadas con las IP en los archivos conocidos_host por uso que causan advertencias en un intento de conexión que impide que se conecten los scripts.

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
...
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4
debug1: using hostkeyalias: nms.example.org
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: the RSA host key for 'nms.example.org' differs from the key for the IP address '192.0.2.144'
Offending key for IP in /home/zoredache/.ssh/known_hosts:25
Matching host key in /etc/ssh/ssh_known_hosts:104
Are you sure you want to continue connecting (yes/no)?

¿Cómo puedo evitar que ssh almacene en caché este valor por IP en cada usuario conocido_hosts? ¿O hay alguna razón de seguridad por la que solo tengo que vivir con este comportamiento molesto? Esto también me frustra porque un par de servidores tienen direcciones IP algo dinámicas. Mi gestión de configuración maneja las actualizaciones de DNS. Pero me quedan estas claves de host por IP que llenan mis archivos de host_conocidos por usuario.

Zoredache
fuente

Respuestas:

22

Creo que es para hacer el CheckHostIPtrabajo.

Si este indicador se establece en "sí", ssh (1) verificará adicionalmente la dirección IP del host en el known_hostsarchivo. Esto permite que ssh detecte si una clave de host cambió debido a la falsificación de DNS. Si la opción se establece en "no", la verificación no se ejecutará. El valor predeterminado es "sí".

Obtiene diagnósticos ligeramente mejores en caso de una configuración incorrecta o ataque con esta opción, pero en realidad no mejora la seguridad de ninguna manera que se me ocurra.

Si apaga CheckHostIP, SSH (a partir de OpenSSH 6.7p1) no registra la dirección IP cuando se conecta a un nuevo host por nombre. Entonces agregue esto a su .ssh/config:

CheckHostIP no

Puede agregarlo a una Hostsección si solo desea desactivarlo para un host específico (especialmente uno con una dirección IP dinámica).

Gilles 'SO- deja de ser malvado'
fuente
Sí, esta es la configuración que necesito.
Zoredache
Aunque estoy de acuerdo con todo lo que has dicho @Gilles, técnicamente me (en aras de una buena discusión) decir que CheckHostIP yes hace mejorar la seguridad ... si el usuario sabe exactamente lo que está haciendo, cómo el sistema utiliza este parámetro, y Los conceptos de confianza implícita. Entonces, realmente estaría dividiendo pelos, lo que no haré ... Lo
guardaré