
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.9
e os nomes sejam hostname
ehostname.domainname
Pelo que entendi, a solução para poder conectar-se aos dois hosts é adicioná-los ao ~/.ssh/know_hosts
arquivo. 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_hosts
arquivo, 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
, hostname
ou 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.
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ê?