SSH em uma caixa com um IP alterado frequentemente

22

Eu tenho algumas caixas de nuvem que alteram seus IP frequentemente.

Eu ssh usando o nome do host, mas tenho que editar o arquivo known_hosts toda vez que o servidor iniciar devido a esta 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 qualquer risco de segurança associado ao que eu quero fazer, existe uma maneira de ignorar esse erro ou substituir automaticamente o arquivo known_hosts automaticamente, de modo que nem sempre eu mesmo precise editá-lo?

coneybeare
fonte

Respostas:

20

Edite seu arquivo ssh_config e adicione change this line:

CheckHostIP no

O padrão CheckHostIP é 'yes'. O que isso faz é fazer exatamente o tipo de verificação que você está falhando. Desligá-lo significa que apenas confia que o IP é variável e fará a verificação de chave no nome do host.

sysadmin1138
fonte
2
Isso desativa um recurso de segurança para todos os servidores aos quais você se conectará, o que é uma prática extremamente ruim. Em vez disso, você deve usar esta opção apenas para um host específico que você sabe que terá esse problema - ou usar a opção HostKeyAlias ​​- novamente para um host específico.
ZaTricky
@zaTricky "Prática extremamente ruim"? O que há de tão extremo nisso, hmm? Eu acho que é tão seguro, é simplesmente uma preferência individual. Você apenas fixa uma chave a um nome de host (em vez de IP). Para https, o HPKP funciona da mesma forma e todo mundo diz que é seguro ou excessivamente seguro.
Kubanczyk
@kubanczyk Isto está dizendo para torná-lo uma configuração global - nenhum conselho sobre a especificação de um host, o que eu fiz ponto fora
zaTricky
25

Adição: você pode tentar apenas desativar a verificação CheckHostIP para esse nome:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
Koos van den Hout
fonte
5
Essa é a melhor opção para reduzir o impacto na segurança da desativação da verificação de IP.
Espo
3

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


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

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

Com isso, a conexão com o servidor myserver.example.comnão usará o nome do host ou o endereço IP para a referência local - sempre usará apenas o HostKeyAlias ​​fornecido ao se conectar a esse servidor. Para mim, faz sentido usar o nome do host - mas é claro que você pode usar qualquer apelido que desejar.


As configurações típicas para hosts dinâmicos são as seguintes:

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 têm as mesmas chaves de host (geralmente esse não deve ser o caso). Isso impediria entradas duplicadas. No futuro, se as chaves mudarem legitimamente, você não precisará substituir / excluir várias entradas. Apenas um. Os servidores Gitlab Geo são um bom exemplo disso.


Em relação à limpeza do arquivo known_hosts, sugiro examinar outras perguntas / respostas especificamente relacionadas à manutenção / remoção de entradas antigas de known_hosts. Por exemplo, consulte Como gerenciar meu arquivo .ssh / known_hosts ; Estou especialmente impressionado com a resposta de user1953828, embora perceba que ainda não há muitos votos positivos. :)

zaTricky
fonte
Isso mostra o valor que uma resposta no mesmo dia tem sobre SO versus a resposta certa, respondida 8 anos depois.
parity3 4/01
2

Eu uso essas opções duvidosas para solucionar 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 se a chave permanecer a mesma, mas o IP mudar:

ssh remoteServerName -l username -o "CheckHostIP=no"
Zv_oDD
fonte
Se o servidor alterar as chaves do host com frequência, considere configurar a assinatura da chave do host
Cameron Tacklind
1

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

hayalci
fonte
1

Você pode colocar CheckHostIP nono seu ~/.ssh/configarquivo, mas isso deixa você aberto a ataques de falsificação. Se você não estiver preocupado com isso, essa configuração deve desativar a known_hostsverificação.

Steven segunda-feira
fonte
0

Evito adicionar as impressões digitais ao meu known_hostsarquivo ao conectar-me a máquinas transitórias 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.5pelo endereço IP da sua máquina e secret.pempelo caminho completo da sua chave Ssh. Você ainda receberá um aviso de que o 10.0.0.5item foi adicionado, mas realmente desapareceu /dev/null. Faço isso com frequência suficiente para definir um alias no meu~/.profile

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

Reservo ssh [email protected]comandos de tipo para máquinas onde tive o problema de verificar a impressão digital.

Hbar
fonte
Isso faz sentido para servidores você só conectar a uma vez - mas há melhores maneiras de se livrar de entradas obsoletos - e você não deve ser que preocupado com o quão sujo seu arquivo known_hosts é. Provavelmente você gastou muito mais tempo e energia criando esse apelido do que valor que o apelido lhe trouxe.
ZaTricky
-2

Torne conhecidos_hosts somente leitura.

Eldelshell
fonte
Isso interrompe a funcionalidade quando opções pragmáticas estão facilmente disponíveis. : - /
zaTricky