SSH em uma caixa com um IP frequentemente alterado

16

Eu tenho algumas caixas de nuvem que mudam seu IP com frequência.

Eu ssh usando o nome do host, mas tenho que editar o arquivo known_hosts toda vez que o servidor é iniciado devido a essa mensagem de erro:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is…

Além de quaisquer riscos de segurança e associados ao que quero fazer, existe uma maneira de ignorar esse erro ou substituir o arquivo known_hosts automaticamente, de modo que nem sempre eu mesmo precise editá-lo?

    
por coneybeare 22.10.2010 / 00:13

8 respostas

16

Edite seu arquivo ssh_config e adicione a mudança nesta linha:

CheckHostIP no

O CheckHostIP é padronizado como 'yes'. O que isto faz é fazer exatamente o tipo de verificação que você está falhando. Desligá-lo significa confiar apenas que o IP é variável, e vai para a verificação da chave contra o nome do host.

    
por 22.10.2010 / 00:31
22

Além disso: você pode tentar desativar apenas a verificação CheckHostIP para esse nome :

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
    
por 22.10.2010 / 11:45
2

Eu uso essas opções desonestas para contornar esse problema. (A chave pública do meu host é regenerada com bastante frequência. Portanto, isso remove a verificação de IP e chave)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

Você também pode usar isso apenas se a chave permanecer igual, mas o IP mudar:

ssh remoteServerName -l username -o "CheckHostIP=no"
    
por 23.01.2015 / 00:18
1

Você pode definir StrictHostKeyChecking = no em sua configuração do cliente ssh (ou seja, o arquivo ~ / ssh / config na máquina que você se conecta), para ignorar o aviso.

    
por 22.10.2010 / 00:29
1

Você pode colocar CheckHostIP no no seu arquivo ~/.ssh/config , mas isso deixa você aberto para ataques de falsificação. Se você não estiver preocupado com isso, essa configuração deve desativar a known_hosts check.

    
por 22.10.2010 / 00:31
0

Evito adicionar as impressões digitais ao meu arquivo known_hosts ao se conectar a máquinas transientes da AWS. Eu uso um comando como

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem [email protected]

para se conectar a eles. Ele não perguntará se você deseja adicionar a máquina “à lista de hosts conhecidos”. Substitua 10.0.0.5 pelo endereço IP da sua máquina e secret.pem pelo caminho completo da sua chave Ssh. Você ainda receberá um aviso de que 10.0.0.5 foi adicionado, mas ele realmente desapareceu em /dev/null . Eu faço isso com freqüência suficiente para que eu defina um alias no meu ~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Eu reservo os comandos ssh [email protected] type para máquinas onde tive o trabalho de verificar a impressão digital.

    
por 16.06.2017 / 16:49
0

Muitas das respostas aqui vão funcionar - mas tecnicamente são soluções alternativas. O OpenSSH já tem um recurso integrado com isso em mente: HostKeyAlias .

Em seu arquivo .ssh / config, adicione HostKeyAlias <alias> a uma configuração de host:

host myserver.example.com
HostKeyAlias myserver.example.com

Com isso, conectar-se ao servidor myserver.example.com não usará o nome do host ou o endereço IP - ele sempre usará > somente o HostKeyAlias fornecido ao se conectar a ele servidor. Para mim, faz sentido usar o nome do host - mas você pode usar qualquer alias que você goste.

As configurações típicas para mim mesmo para hosts dinâmicos são assim:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Isso também pode ser usado em alguns cenários obscuros, nos quais você sabe que vários servidores possuem as mesmas chaves de host (geralmente, isso não deve ser ). Isso evitaria entradas duplicadas. No futuro, se as chaves forem alteradas legitimamente, você não precisará substituir / excluir várias entradas. Apenas um. Os servidores Gitlab Geo são um bom exemplo disso.

Sobre a limpeza do arquivo known_hosts, sugiro que você consulte outras perguntas / respostas especificamente relacionadas à manutenção / remoção de entradas conhecidas do known_hosts. Por exemplo, consulte Como gerenciar meu arquivo .ssh / known_hosts ; Eu estou especialmente impressionado com a resposta do user1953828, embora eu veja que ele não tem muitos votos positivos (ainda). :)

    
por 05.02.2018 / 09:23
-2

Torne os known_hosts somente leitura.

    
por 22.10.2010 / 15:47