SSH в серверы NAT'd на том же общедоступном IP-адресе

Я пробую к SSH от в офисе X к нескольким полям Linux в офисе Y. Поля Linux в офисе Y находятся позади NAT, и каждый работает на их собственных портах. Я могу успешно достигнуть всех их через SSH, но я не могу пройти проверку подлинности.

Я смог к SSH в первое поле, но когда я добрался до второго, это сказало:

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

Мое понимание - то, что это ожидает видеть тот же ключ от того общедоступного IP-адреса, но это видит другой, потому что это - другой сервер SSH.

Как я могу зафиксировать его так, это создает/принимает другой ключ из каждого сервера позади того же самого IP-адреса?

Enter image description here

16
задан 29 August 2015 в 08:37
4 ответа

Имя хоста или IP-адрес сохраняется в виде хэша (или в виде обычного текста в зависимости от параметров и значений версии по умолчанию) в вашем файле known_hosts . Самый простой обходной путь - добавить запись для каждого хоста в DNS или файл / etc / hosts (тьфу!) С тем же IP-адресом (WAN), например, в / etc / hosts :

your.wan.ip.address      servera serverb

, а затем ssh по имени хоста и порту.

15
ответ дан 2 December 2019 в 20:34

Есть несколько способов исправить это:

  1. Вы можете отключить проверку ключа хоста для этого конкретного хоста.В вашем файле ssh_config ( ~ / .ssh / config ) введите что-то вроде:

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

    Это настраивает ssh так, чтобы никогда не хранить ключи хоста для remote.host.name , но обратная сторона заключается в том, что теперь вы открыты для атак «злоумышленник посередине» (потому что вы слепо принимаете ключи хоста (вы не можете определить, изменился ли ключ удаленного хоста).

  2. Вы можете использовать аналогичную технику, чтобы просто дать каждому хосту уникальный файл known_hosts :

     Хост  Хоста
    Порт 10098
    Имя хоста remote.host.name
    UserKnownHostsFile ~ / .ssh / known_hosts_hosta
    
    Хост hostb
    Порт 10099
    Имя хоста remote.host.name
    UserKnownHostsFile ~ / .ssh / known_hosts_hostb
     

    Затем вы подключитесь к этим хостам с помощью ssh hosta или ssh hostb , а ssh возьмет фактическое имя хоста и порт из файла конфигурации.

22
ответ дан 2 December 2019 в 20:34

Вы не говорите, какую версию Solaris (и, что более важно, SSH) вы используете, но достаточно современные версии OpenSSH решили эту проблему.

Вот две записи из моего файла known_hosts , которые имеют одинаковый IP-адрес, но разные номера портов (одна из них - неявное 22); как вы можете видеть, сохраненные ключи не совпадают.

[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==

Я не знаю, какая версия OpenSSH представила это, но я использую

[me@risby fin]$ ssh -V
OpenSSH_6.9p1, OpenSSL 1.0.1k-fips 8 Jan 2015
8
ответ дан 2 December 2019 в 20:34

Чтобы расширить мой комментарий к ответу @larsks,Я думаю, что использование записей ~ / .ssh / config намного лучше, чем изменение / etc / hosts, хотя я бы использовал HostKeyAlias ​​ вместо того, чтобы разделять известные хосты на разные файлы. например:

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

И аналогично для hostb

3
ответ дан 2 December 2019 в 20:34

Теги

Похожие вопросы