SSH em servidores NAT no mesmo endereço IP público

16

Estou tentando 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 é executada em suas próprias portas. Posso alcançar todos eles com êxito por meio do SSH, mas não posso autenticar.

Eu consegui o SSH na primeira caixa, mas quando cheguei na segunda, ele disse:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 um 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?

    
por Copy Run Start 29.08.2015 / 02:26

4 respostas

15

O nome do host ou endereço IP está sendo armazenado como um hash (ou em texto sem formatação, dependendo das opções e dos padrões de versão) no arquivo known_hosts . A solução mais fácil é adicionar uma entrada para cada host ao DNS ou ao arquivo /etc/hosts (ugh!) Com o mesmo endereço IP (WAN), como em /etc/hosts :

your.wan.ip.address      servera serverb

e, em seguida, ssh pelo nome do host e pela porta.

    
por 29.08.2015 / 03:49
22

Existem algumas maneiras de corrigir isso:

  1. Você pode desabilitar a verificação da chave do host para esse host específico. No seu arquivo ssh_config ( ~/.ssh/config ), coloque algo como:

    Host remote.host.name
    UserKnownHostsFile /dev/null
    StrictHostkeyChecking no
    

    Isso configura ssh para nunca armazenar chaves de host para remote.host.name , mas a desvantagem é que agora você está aberto a ataques man-in-the-middle (porque você está aceitando cegamente chaves de host que não sabe se a chave do host remoto foi alterada).

  2. Você pode usar uma técnica semelhante para simplesmente fornecer a cada host um arquivo known_hosts exclusivo:

    Host hosta
    Port 10098
    Hostname remote.host.name
    UserKnownHostsFile ~/.ssh/known_hosts_hosta
    
    Host hostb
    Port 10099
    Hostname remote.host.name
    UserKnownHostsFile ~/.ssh/known_hosts_hostb
    

    Você se conectará a esses hosts com ssh hosta ou ssh hostb e ssh obterá o nome do host e a porta reais do arquivo de configuração.

por 29.08.2015 / 03:46
8

Você não diz qual versão do Solaris (e, mais importante, SSH) está usando, mas versões suficientemente atualizadas do OpenSSH resolveram este problema.

Aqui estão duas entradas do meu arquivo known_hosts , 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.

[10.69.55.47]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAo+zenWwhFWAa/exdxbm3A3htDFGwFVjFlHLO83AfOaloBbBrr6whmLeDqVPBSwI/yrePClpahLUMYE6qGBFCbbOYiQkMDwacNFfxvxd6oCMDDqZH6NWGiBCt0b2M6YKYhYCw6z8n0yvlLk1eTdpp2OpjbfwAIe4eBkWyKNZY9+17VtzARqGR9tgHC8Dh7HBApDR8wooc+XzY6FhD2b21meIt8r8bjfBIu5t6eQgDHh/TzUT1rGH6W0HeUJxpDnpud5Af1ygMEQFrGrzHi5HKtg+K6HFBggMF8t6p2Dz8oMds5pi6IuPlVi3UvO1X7mMJ9pP7ByMQqiVrQ9wtAbC2QQ==
10.69.55.47 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1clJ6vp8NDy7D9YVgAKQQzERfx3scR0c0027yOYGGpeLg+nW+x8mJk1ia9GouUTDME+NP2YDVZUEDog9rtTJvuLd22ZxfoC8LGboyBsmlhOVxdSCxmA/+blPCp1pyocr8pXyXjSkb/qQKKQMRoAU7qKKHPfI5Vugj04l6WbW2rJQTqFD/Lguc8AAUOE6K4DNhETOH2gOnwq6xi0vutDmeUKSqEvM/PQFZSlOL4dFDYO5jAUjvgm6yGHP3LlS9fmCzayJgGgLSnNz0nlcd94Pa1Cd441cCAZHFDvDPniawEafH9ok4Mmew0UGopQGUGbfb5+8g8YphLW6aLdrvnZbAw==

Eu não sei qual versão do OpenSSH introduziu isso, mas estou executando

[me@risby fin]$ ssh -V
OpenSSH_6.9p1, OpenSSL 1.0.1k-fips 8 Jan 2015
    
por 29.08.2015 / 07:56
3

Para expandir meu comentário para @larsks answer, acho que usar ~/.ssh/config entries é muito melhor do que modificar / etc / hosts, embora eu use o HostKeyAlias em vez de dividir os hosts conhecidos em arquivos diferentes. por exemplo:

Host hosta
Port 10098
Hostname remote.host.name
HostKeyAlias hosta

E, da mesma forma, para hostb

    
por 03.09.2015 / 16:02