Pourquoi SSH ajoute-t-il une entrée known_host pour une adresse IP?

18

J'ai un hôte nommé nms.example.org. Dans mon /etc/ssh/ssh_known_hostsj'ai une entrée pour l'hôte avec la clé RSA. Cette entrée et toutes les autres entrées sont gérées par mon système de gestion de configuration.

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

J'ai également une entrée dans mon /etc/ssh/ssh_configpour l'hôte spécifique définissant l'alias de clé d'hôte. Ce qui si je comprends tout correctement, cela signifie que seul le nms.example.orgdevrait avoir de l'importance.

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

Pourquoi alors, lorsque je me connecte depuis un client, ssh semble-t-il toujours penser qu'il doit ajouter une clé à mes hôtes connus par utilisateur avec l' IP de l'hôte?

$ 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 sait que mon hôte est valide (Voir:) Host 'nms.example.org' is known and matches the RSA host keyalors pourquoi ajoute-t-il la clé de l'IP à un profil utilisateur?

Ceci est extrêmement irritant, car lorsque je réinstalle une machine, mon système de gestion de configuration gère très bien la collecte et la distribution des clés d'hôte à tous les systèmes. Mais il restera ces clés conflictuelles associées aux adresses IP dans les fichiers connus de l'hôte qui provoquent des avertissements lors d'une tentative de connexion qui empêchent les scripts de se connecter.

$ 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)?

Comment puis-je empêcher ssh de mettre en cache cette valeur par IP dans chaque utilisateur known_hosts? Ou y a-t-il une raison de sécurité pour laquelle je dois juste vivre avec ce comportement ennuyeux? C'est aussi frustrant pour moi car quelques serveurs ont des adresses IP quelque peu dynamiques. Ma gestion de configuration gère les mises à jour DNS. Mais je reçois ces clés d'hôte par IP restantes remplissant mes fichiers d'hôte connu par utilisateur.

Zoredache
la source

Réponses:

22

Je pense que c'est pour faire le CheckHostIPtravail.

Si cet indicateur est défini sur «oui», ssh (1) vérifiera en outre l'adresse IP de l'hôte dans le known_hostsfichier. Cela permet à ssh de détecter si une clé d'hôte a changé en raison d'une usurpation DNS. Si l'option est définie sur «non», la vérification ne sera pas exécutée. La valeur par défaut est «oui».

Vous obtenez des diagnostics légèrement meilleurs en cas de mauvaise configuration ou d'attaque avec cette option, mais cela n'améliore en fait la sécurité d'aucune façon à laquelle je puisse penser.

Si vous désactivez, CheckHostIPSSH (à partir d'OpenSSH 6.7p1) n'enregistre pas l'adresse IP lorsque vous vous connectez à un nouvel hôte par son nom. Alors ajoutez ceci à votre .ssh/config:

CheckHostIP no

Vous pouvez l'ajouter à une Hostsection si vous souhaitez uniquement la désactiver pour un hôte spécifique (en particulier celui avec une adresse IP dynamique).

Gilles 'SO- arrête d'être méchant'
la source
Oui, c'est le réglage dont j'ai besoin.
Zoredache
Bien que je sois d'accord avec tout ce que vous avez dit @ Gilles, techniquement, je dirais (pour une bonne discussion) que CheckHostIP yes cela améliore la sécurité ... SI l'utilisateur sait exactement ce qu'il fait, comment le système utilise ce paramètre, et les notions de confiance implicite. Donc, je diviserais vraiment les cheveux, ce que je ne ferai pas ... Je vais le sauvegarder pour la sécurité;)
0xSheepdog