Verificação da chave SSH para muitos hosts atrás de um único nome DNS

4

(nota: isso parece semelhante a uma questão existente , mas acredito que existam algumas diferenças nos detalhes de implementação aqui)

O problema

Eu tenho algumas centenas de hosts por trás de um único endereço DNS. Cada host tem sua própria chave de host separada (e não posso alterá-la - ela é definida pelo fornecedor e não deve ser modificada).

Quando tento conectar-me a qualquer um dos hosts por meio do nome único uma segunda vez, isso faz com que ssh fique muito chateado:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The DSA host key for (hostname) has changed,
and the key for the corresponding IP address 192.168.0.100
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the DSA key sent by the remote host is
SHA256:+38sJSsANknk6vVIHJ/l/xnPCl+ALCNrbi80vrr24cM.
Please contact your system administrator.
Add correct host key in /Users/me/.ssh/known_hosts to get rid of this message.
Offending DSA key in /Users/me/.ssh/known_hosts:291
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
X11 forwarding is disabled to avoid man-in-the-middle attacks.
Permission denied (publickey,password,keyboard-interactive).

A dificuldade

  • Não consigo definir todas as chaves do host para a mesma coisa.
  • Conectar-se a um único endereço IP não é uma boa solução, já que não é um "round robin" real, e sim um serviço DNS fornecido pelo hardware que roteia a conexão para o servidor menos ocupado.
  • Meus usuários, bem como alguns processos automatizados, devem conseguir atingir o nome DNS único.

A questão

Quais seriam as melhores práticas para esse ambiente usar o SSH de forma segura (isto é, com a maior verificação possível quanto a intacto)?

Eu não quero desabilitar a verificação da chave por motivos de segurança, e a solução óbvia de se conectar a um único endereço IP contorna o balanceamento de carga fornecido pela implementação do DNS do fornecedor.

    
por Mikey T.K. 16.03.2016 / 17:29

1 resposta

3

Você pode pré-gerar known_hosts para todos os seus IPs usando ssh-keyscan . Em seguida, defina-o nos sistemas dos usuários como GlobalKnownHostsFile (somente leitura) e, para isso, hostname disable UserKnownHostsFile (definido como /dev/null ).

Eu não tentei, mas ele deve estar satisfeito com o IP e se ele não conseguir gravar known_hosts record com hostname .

Exemplo de cliente /etc/ssh/ssh_config (também é bom para distribuir):

[...] # other stuff
Host dns_hostname
  GlobalKnownHostsFile /etc/ssh/known_hosts
  UserKnownHostsFile /dev/null
    
por 16.03.2016 / 17:46