Como posso manter os know_hosts do SSH atualizados (semi-seguros)?

Como posso manter os know_hosts do SSH atualizados (semi-seguros)?

Só para esclarecer isso, para que não me digam para não fazer isso:

  1. As máquinas em questão estão todas em uma rede local com pouco ou nenhum acesso à Internet (nem estão bem conectadas à rede corporativa)
  2. Todo mundo que tem a capacidade de configurar um ataque man-in-the-middle já tem root na máquina
  3. As máquinas são reinstaladas como parte dos procedimentos de controle de qualidade, portanto, é importante ter novas chaves de host (precisamos ver como as outras máquinas reagem); Estou apenas tentando tornar minha máquina mais agradável de usar.

Eu faço muitas reinstalações em máquinas que alteram suas chaves de host. Isso exige que você entre ~/.ssh/known_hostsna minha máquina e vá para a chave antiga e adicione a nova chave. Isso é um grande incômodo, então comecei a considerar maneiras de automatizar isso.

Não quero aceitar cegamente qualquer chave de host, portanto, corrigir o OpenSSH para ignorar as chaves de host está fora de questão. Eu considerei criar um wrapper em torno do sshcomando que detectará o erro retornando sshe me apresentará um prompt para excluir a chave antiga ou sair. Também considerei criar um daemon que buscaria a chave de host mais recente de uma máquina em uma lista de permissões (há cerca de vinte máquinas que estão sendo constantemente reinstaladas) e substituiria a chave de host antiga em known_hosts.

Como você automatizaria esse processo?

Responder1

Dependendo das respostas para a reinstalação/IPs permanecerem os mesmos, eu consideraria configurar "StrictHostKeyChecking" em ~/.ssh/config para Host/IPs/Padrões específicos.

Se isso não for possível, tente automatizar o carregamento de chaves nos hosts, talvez no processo de reinstalação.

Responder2

Se você estiver usando um sistema de gerenciamento de configuração, como o Puppet, poderá usá-lo para manter o /etc/ssh/ssh_known_hostsarquivo atualizado com os hosts à medida que as máquinas clientes fazem check-in no servidor central. Então você pode ativar a StrictHostKeyCheckingopção no arquivo de configuração.

Isso é exatamente o que fazemos com nossas instâncias do Amazon EC2 que fazem check-in com nosso servidor Puppet master. Temos o servidor fantoche servindo como bastião jumpbox em nossas instâncias EC2 e é a única máquina com permissão para fazer SSH nelas. Em seguida, mantemos o /etc/ssh/ssh_known_hostsarquivo atualizado com as chaves do host e o /etc/hostsarquivo para atualizar o endereço IP DNS público do EC2.

Responder3

Você quer ssh-keyscan, que é distribuído com o openssh. Depágina de manual:

 ssh-keyscan is a utility for gathering the public ssh host keys of a num‐
 ber of hosts.  It was designed to aid in building and verifying
 ssh_known_hosts files. 

Como parte de sua reinstalação, faça com que uma máquina com uma lista atualizada de chaves execute isso e, em seguida, distribua o arquivoknown_hosts atualizado para o restante das máquinas.

Ou, como outros mencionaram, você pode desativar o StrictHostKeyChecking. Isso expõe você a ataques man-in-the-middle, embora isso possa não ser uma preocupação em seu ambiente.

Responder4

Talvez você queira salvar as chaves do host antes de reinstalar e restaurá-las posteriormente.

Alternativamente, você pode usar alguma ferramenta de gerenciamento de configuração comoMotor CFouFantochepara distribuir um documento oficial /etc/ssh/ssh_known_hostsa todos os clientes do seu site. (OpenSSH consulta /etc/ssh/ssh_known_hostsse não houver entrada correspondente em ~/.ssh/known_hosts.)

informação relacionada