Eu tenho um host chamado nms.example.org. No meu /etc/ssh/ssh_known_hosts
eu tenho uma entrada para o host com a chave RSA. Esta entrada e todas as outras entradas são gerenciadas pelo meu sistema de gerenciamento de configuração.
nms.example.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZqfmVPs/XqTS...
Além disso, tenho uma entrada no meu /etc/ssh/ssh_config
para o host específico que define o alias da chave do host. Que se eu entendi tudo corretamente, isso significa que apenas o nms.example.org
deve importar.
Host nms.example.org nms.example nms
HostKeyAlias nms.example.org
HostName nms.example.org
Por que, então, quando eu me conecto de um cliente, o ssh ainda parece achar necessário adicionar uma chave ao meu por usuário known_hosts com o IP do 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
...
O SSH sabe que meu host é válido (Veja: Host 'nms.example.org' is known and matches the RSA host key
) então por que ele adiciona a chave do IP a um perfil de usuário?
Isso é extremamente irritante, porque quando eu reinstalo uma máquina, meu sistema de gerenciamento de configuração lida com a coleta e distribuição das chaves do host para todo o sistema. Mas haverá essas sobrescritas chaves conflitantes associadas a IPs em arquivos known_host por uso que causam avisos em uma tentativa de conexão que impede a conexão de 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)?
Como posso evitar que o ssh armazene esse valor por IP em cada usuário known_hosts? Ou existe alguma razão de segurança porque eu simplesmente tenho que viver com esse comportamento irritante? Isso também me frustra porque alguns servidores têm endereços IP dinâmicos. Meu gerenciamento de configuração lida com as atualizações do DNS. Mas recebo essas sobras de chaves de host por IP preenchendo meus arquivos known_host por usuário.