Estou tentando fazer o SSH do escritório X para algumas caixas Linux no escritório Y. As caixas Linux no escritório Y estão atrás do NAT e cada uma delas é executada em suas próprias portas. Posso alcançar todos eles com êxito através do SSH, mas não consigo autenticar.
Consegui fazer o SSH na primeira caixa, mas quando cheguei na segunda, ele dizia:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
[edited out fingerprint]
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:1
Meu entendimento é que ele espera ver a mesma chave desse endereço IP público, mas está vendo uma diferente porque é um servidor SSH diferente.
Como posso corrigi-lo para que ele crie / aceite uma chave diferente de cada servidor atrás do mesmo endereço IP?
Respostas:
O nome do host ou o endereço IP está sendo armazenado como um hash (ou em texto sem formatação, dependendo das opções e padrões da versão) no seu
known_hosts
arquivo. A solução mais fácil é adicionar uma entrada para cada host no/etc/hosts
arquivo DNS ou (ugh!) Com o mesmo endereço IP (WAN), como em/etc/hosts
:e depois
ssh
pelo nome do host e porta.fonte
Existem algumas maneiras de corrigir isso:
Você pode desativar a verificação de chave do host para esse host específico. No seu
ssh_config
arquivo (~/.ssh/config
), coloque algo como:Isso configura
ssh
para nunca armazenar chaves de hostremote.host.name
, mas a desvantagem é que agora você está aberto a ataques do tipo intermediário (porque você aceita cegamente as chaves do host, não pode saber se a chave do host remoto foi alterada).Você pode usar uma técnica semelhante para simplesmente fornecer a cada host um
known_hosts
arquivo exclusivo :Você se conectará a esses hosts com
ssh hosta
oussh hostb
, essh
pegará o nome do host e a porta reais do arquivo de configuração.fonte
/etc/hosts
arquivo também funcionará. Eu gosto mais disso porque (a) não requer privilégios escalados e (b) significa que você não precisa especificar números de porta na linha de comando.~/.ssh/config
(uma porta diferente para cada umahosta
hostb
), conforme descrito na resposta do Larsks. Da mesma forma, você pode especificar diferentes nomes de usuário, chaves, etc. neste arquivo de configuração para os diferentes hosts, para que tudo o que você tenha que fazer na linha de comando sejassh hosta
oussh hostb
HostKeyAlias
diretiva em vez de dividir os hosts conhecidos em arquivos diferentes. por exemplo,HostKeyAlias hosta
Você não diz qual versão do Solaris (e, mais importante, SSH) está usando, mas versões suficientemente atualizadas do OpenSSH solucionaram esse problema.
Aqui estão duas entradas do meu
known_hosts
arquivo, que têm o mesmo endereço IP, mas números de porta diferentes (um é o implícito 22); como você pode ver, as chaves armazenadas não são as mesmas.Não sei qual versão do OpenSSH introduziu isso, mas estou executando
fonte
Para expandir meu comentário à resposta do @larsks, acho que usar
~/.ssh/config
entradas é muito melhor do que modificar o / etc / hosts, embora eu usasse oHostKeyAlias
invés de dividir os hosts conhecidos em arquivos diferentes. por exemplo:E da mesma forma para
hostb
fonte