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

2

Só para mostrar isso na frente, não me dizem 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 (elas nem estão bem conectadas à rede corporativa)
  2. Todos que têm a capacidade de configurar um ataque man-in-the-middle já têm raiz na máquina
  3. As máquinas são reinstaladas como parte dos procedimentos de controle de qualidade, portanto, ter novas chaves de host é importante (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 ir em ~/.ssh/known_hosts na minha máquina e explodir para a chave antiga e adicionar a nova chave. Isso é uma dor enorme no tuckus, então eu comecei a pensar em maneiras de automatizar isso.

Eu não quero apenas aceitar cegamente qualquer chave do host, então o patch do OpenSSH para ignorar as chaves do host está fora do ar. Eu considerei a criação de um wrapper em torno do comando ssh que irá detectar o erro retornando de ssh e me apresentar um aviso 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 desbloqueio (existem cerca de vinte máquinas que estão sendo constantemente reinstaladas) e substituir a chave de host antiga em known_hosts .

Como você automatizaria esse processo?

    
por Chas. Owens 16.06.2010 / 14:52

4 respostas

3

Dependendo das resons para a reinstalação / IPs ficar o mesmo eu olharia para a criação de "StrictHostKeyChecking" em ~ / .ssh / config para Host / IPs / Patterns específicos.

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

    
por 16.06.2010 / 16:02
2

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

Isso é precisamente o que fazemos com nossas instâncias do Amazon EC2 que fazem check-in com nosso servidor mestre do Puppet. Nós temos o servidor de marionetes servindo como o jumpbox bastion em nossas instâncias do EC2 e é a única máquina permitida para o SSH dentro deles. Em seguida, mantemos o arquivo /etc/ssh/ssh_known_hosts atualizado com as chaves do host e o arquivo /etc/hosts para atualizar o endereço IP público do EC2.

    
por 18.06.2010 / 07:54
2

Você deseja ssh-keyscan , que é distribuído com o openssh. Na pá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, tenha uma máquina com uma lista de chaves atualizada executando isso e, em seguida, distribua o arquivo known_hosts atualizado para o restante das máquinas.

Ou, como outros usuários mencionaram, você pode desativar o StrictHostKeyChecking. Isso abre você para ataques man-in-the-middle, embora isso não seja uma preocupação em seu ambiente.

    
por 18.06.2010 / 08:03
1

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

Como alternativa, você pode usar alguma ferramenta de gerenciamento de configuração como CFengine ou Puppet para distribuir um /etc/ssh/ssh_known_hosts autorizado para todos os clientes em seu site. (O OpenSSH consulta /etc/ssh/ssh_known_hosts se não houver entrada correspondente em ~/.ssh/known_hosts .)

    
por 18.06.2010 / 05:32