Por que o SSH adiciona uma entrada known_host para um endereço IP?

12

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.

    
por Zoredache 25.05.2016 / 23:47

1 resposta

17

Acho que é para fazer o CheckHostIP funcionar.

If this flag is set to “yes”, ssh(1) will additionally check the host IP address in the known_hosts file. This allows ssh to detect if a host key changed due to DNS spoofing. If the option is set to “no”, the check will not be executed. The default is “yes”.

Você obtém diagnósticos um pouco melhores em caso de configuração incorreta ou ataque com essa opção, mas na verdade não melhora a segurança de qualquer forma que eu possa pensar.

Se você desativar CheckHostIP , o SSH (a partir do OpenSSH 6.7p1) não registrará o endereço IP quando você se conectar a um novo host pelo nome. Então, adicione isso ao seu .ssh/config :

CheckHostIP no

Você pode adicioná-lo a uma seção Host se desejar desativá-lo somente para um host específico (especialmente um com um endereço IP dinâmico).

    
por 26.05.2016 / 01:36

Tags