Como editarknown_hosts quando vários hosts compartilham o mesmo IP e nome DNS?

Como editarknown_hosts quando vários hosts compartilham o mesmo IP e nome DNS?

Eu regularmente ssh em um computador que é um computador OS X/Linux de inicialização dupla. As duas instâncias de sistema operacional não compartilham a mesma chave de host, portanto podem ser vistas como dois hosts compartilhando o mesmo IP e DNS. Digamos que o IP seja 192.168.0.9e os nomes sejam hostnameehostname.domainname

Pelo que entendi, a solução para poder conectar-se aos dois hosts é adicioná-los ao ~/.ssh/know_hostsarquivo. No entanto, é mais fácil falar do que fazer, porque o arquivo tem hash e provavelmente possui várias entradas por host ( 192.168.0.9, hostname, hostname.domainname). Como consequência, tenho o seguinte aviso

Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'

Existe uma maneira fácil de editar o known_hostsarquivo, mantendo os hashes. Por exemplo, como posso encontrar as linhas correspondentes a um determinado hostame? Como posso gerar hashes para alguns hosts conhecidos?

A solução ideal me permitiria conectar-me perfeitamente a este computador com ssh, não importa se eu o chamo 192.168.0.9, hostnameou hostname.domainname, nem se ele usa sua chave de host Linux ou sua chave de host OSX. No entanto, ainda quero receber um aviso se houver um ataque man-in-the-middle real,ou sejase outra chave além dessas duas for usada.

Responder1

A solução mais direta aqui é usar as mesmas chaves de host para Linux e OS X. Ou seja, escolher um conjunto de /etc/ssh/ssh_host_*_key*arquivos e copiá-los para o outro sistema operacional. Em seguida, a mesma chave de host será apresentada a um cliente SSH, independentemente de qual sistema operacional você inicializou, e o cliente SSH não ficará sabendo.

Responder2

Como @Izzy sugeriu em um comentário acima, o ssh informa a linha incorreta e, ao remover essa linha (salvando-a em outro lugar), aceitando a nova chave e copiando a linha removida de volta, você acaba com duas chaves para o mesmo host e o ssh também aceitará.

(Você também pode usar ssh-keygen -H -F <hostname>para encontrar linhas em seu arquivoknown_hosts que correspondam a esse nome de host. Executar isso depois de copiar a linha removida deve listar duas entradas.)

Se alguém souber como fazer o PuTTY fazer a mesma coisa, ficaria muito interessado em saber mais sobre isso.

Responder3

Encontrei isso que pode ajudá-lo com o que você deseja alcançar.

Fonte:https://stackoverflow.com/questions/733753/how-to-handle-ssh-host-key-verification-with-2- Different-hosts-on-the-same-but

Crie um arquivo de configuração em seu diretório .ssh da seguinte maneira:

Host server1
  Hostname x1.example.com
  HostKeyAlias server1
  CheckHostIP no
  Port 22001
  User karl

Host server2
  Hostname x2.example.com
  HostKeyAlias server2
  CheckHostIP no
  Port 22002
  User karl

Explicação abaixo (de man ssh_config)

VerifiqueHostIP

Se este sinalizador estiver definido como "sim", o ssh(1) verificará adicionalmente o endereço IP do host no arquivoknown_hosts. Isso permite que o ssh detecte se uma chave de host foi alterada devido à falsificação de DNS. Se a opção estiver definida como “não”, a verificação não será executada. O padrão é "sim".

HostKeyAlias

Especifica um alias que deve ser usado em vez do nome real do host ao procurar ou salvar a chave do host nos arquivos do banco de dados de chaves do host. Esta opção é útil para encapsular conexões SSH ou para vários servidores em execução em um único host.

A linha Nome de usuário e Porta também evita que você forneça essas opções na linha de comando, então você pode simplesmente usar:

% ssh server1
% ssh server2

Responder4

Não encontro esse problema ao conectar-me a várias caixas VPS que compartilham o mesmo IP porque cada uma tem uma porta SSH diferente (20022,30022, etc), portanto, são registradas como hosts conhecidos com chaves diferentes.

Isso poderia ser uma solução alternativa para você?

informação relacionada