SSH: host conhecido com endereço dinâmico

12

Preciso me conectar a um host com um endereço IP dinâmico.

Toda vez que seu IP muda, o SSH solicita a validação da impressão digital:

The authenticity of host '...' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)?

Seria possível passar SSH a chave pública do host, para que:

  1. SSH valida automaticamente a autenticidade do host
  2. A chave do host não é armazenada no arquivo known_hosts

Esta pergunta difere de Como posso evitar a verificação de host do SSH para hosts conhecidos? desde que outras questões metas para validação suprimir SSH, enquanto eu não quero para suprimi-la: eu não quero ter o anfitrião autenticado, apenas usando a chave pública do host (que eu sei, e tê-lo armazenado em um arquivo) ao invés de SSH known_hostsArquivo.

Para mim, a outra pergunta parece ser sobre como conectar-se a um servidor diferente todas as vezes, em vez de conectar-se a um único servidor conhecido com um IP dinâmico.

peoro
fonte

Respostas:

8

A melhor solução (ou seja, o mais próximo do que eu quero) que eu poderia encontrar é usar a opção HostKeyAlias: ele usará um nome de host que eu especifico para acessar known_hosts(em vez do IP ao qual estou me conectando).

Vou precisar adicionar a chave pública do host ao known_hostsuso de um determinado nome de host (por exemplo:) myhoste conectar-me a ela usando:

ssh -o 'HostKeyAlias myhost' ...
peoro
fonte
Sei que já faz um tempo, mas: se isso melhor responder à sua pergunta, aceite-a.
precisa
Nota para outros: você pode adicionar o HostKeyAliasvalor de configuração ao seu ~/.ssh/configarquivo ou mesmo ao /etc/ssh/ssh_configarquivo global .
kael
6

O known_hostsarquivo não é apenas a chave, também contém o nome do host que você usa para conectar-se e, se possível, o IP correspondente. É por isso que você vê o erro: ele está comparando o trio que ele obtém do servidor com o que você armazenou no arquivo known_hosts.

Portanto, se o IP continuar mudando, você poderá desativar CheckHostIPe isso significa que apenas verificará o nome do host e a chave do host. Se eles permanecerem inalterados, você deverá ter menos reclamações, mas estará em risco se alguém invadir seu DNS.

NickW
fonte
1
Obrigado pela resposta, vou testá-lo o mais rápido possível! Por que seria assim mesmo? Se eu conheço a chave pública SSH de um host, isso deve ser suficiente para ser totalmente seguro em qualquer caso (a menos que alguém consiga roubar a chave privada desse host), não deveria?
peoro
E ainda não gosto se for sincero. Usando esse sinalizador, o SSH ainda acessará known_hosts. Por quê? Não posso dizer "ssh connect to X cuja chave pública é Y"? Por que não? Isso não seria 100% certo.
peoro
A idéia é que a chave do host faça parte de um todo maior, e isso por si só não é garantia suficiente para garantir que o servidor ao qual você está se conectando ainda seja aquele ao qual você se conectou anteriormente. Você precisa garantir que as entradas IP e DNS também correspondam. Lembre-se, este é um shell baseado em rede, portanto a rede também precisa ser verificada.
NickW