SSH Várias linhas para a mesma chave pública em known_hosts?

0

Recentemente, após algum tempo, tentei fazer login no meu servidor ssh na LAN e recebi este aviso:

$ ssh [email protected]
Warning: Permanently added the RSA host key for IP address '192.168.1.4' to the list of known hosts.

Analisei a seguinte postagem em SO: link Mas eu não acho que isso é devido ao cliente ssh que não verifica o arquivo known_hosts (eu acho que ele verifica no meu caso, e eu não estou executando o Windows).

Aqui está o arquivo known_hosts e descobri que tenho duas linhas da mesma chave pública, mas diferentes nomes de host / IPs:

$ cat ~/.ssh/known_hosts
local.server.hostname,192.168.1.3 ssh-rsa ...Here it goes the public key...
192.168.1.4 ssh-rsa ...Here it goes the same public key (as for the local.server.hostname,192.168.1.3 entry above)...

Tenho certeza de que as duas chaves públicas são iguais (verifiquei a impressão digital de ambas com o comando echo "here I pasted the public key" | base64 -D | md5 , que eu corri para cada entrada de known_hosts). Caso contrário, eu teria visto um "AVISO: IDENTIFICAÇÃO REMOTA DE HOSPEDEIRO MUDOU".

Agora, tenho uma rede local com DHCP, de modo que o servidor é atribuído a um IP e, às vezes, pode ser atribuído a um diferente.

Eu acho que esta é a principal razão pela qual eu tive este aviso: IP do servidor alterado (de 192.168.1.3, primeira linha de known_hosts, para 192.168.1.4), mas como a chave pública permaneceu a mesma e a chave pública já estava confiável pelo meu cliente ssh porque já havia uma entrada para local.server.hostname,192.168.1.3 em known_hosts , o cliente ssh me mostrou o aviso, mas adicionou a entrada para 192.168.1.4 sem me pedir confirmação.

Isso está correto? A única coisa que vem em mente é: por que então o cliente adicionou outra entrada em vez de apenas modificar a existente, como da seguinte maneira:

local.server.hostname,192.168.1.3,192.168.1.4 ssh-rsa ...public key...

Por que duas entradas para a mesma chave pública?

    
por user3019105 10.08.2015 / 15:46

1 resposta

2

De fato, o motivo é o ambiente DHCP que atribuiu um novo endereço IP ao seu servidor.

Sempre que o ssh se conecta a um endereço IP que não possui em seu arquivo known_hosts , ele reagirá de acordo com seu StrictHostKeyChecking config, consulte man ssh_config :

 StrictHostKeyChecking
         If this flag is set to “yes”, ssh(1) will never automatically add host keys to the ~/.ssh/known_hosts file,
         and refuses to connect to hosts whose host key has changed.  This provides maximum protection against trojan
         horse attacks, though it can be annoying when the /etc/ssh/ssh_known_hosts file is poorly maintained or when
         connections to new hosts are frequently made.  This option forces the user to manually add all new hosts.  If
         this flag is set to “no”, ssh will automatically add new host keys to the user known hosts files.  If this
         flag is set to “ask”, new host keys will be added to the user known host files only after the user has con-
         firmed that is what they really want to do, and ssh will refuse to connect to hosts whose host key has
         changed.  The host keys of known hosts will be verified automatically in all cases.  The argument must be
         “yes”, “no”, or “ask”.  The default is “ask”.

Como você vê, o ssh não faz nenhuma tentativa de combinar / atualizar quaisquer chaves conhecidas para o novo endereço IP (o que provavelmente seria considerado um risco de segurança). Daí as diferentes linhas que combinam endereços IP diferentes com a mesma chave de host.

Se o servidor DHCP agora atribuísse o endereço antigo a outro servidor e você tentasse ssh, provavelmente teria uma chave de host diferente e a conexão ssh seria recusada. Para evitar esses casos, você pode querer verificar se pode alternar para endereços IP atribuídos estaticamente (alguns servidores DHCP oferecem suporte para os próprios mapeamentos estáticos, sem alterações nos clientes).

    
por 20.08.2015 / 18:51