Как обрабатывать проверку ключа хоста ssh с двумя разными хостами на одном (но меняющемся) IP-адресе?

У меня есть 2 ssh-сервера за брандмауэром nat в месте, которое каждый день меняет свой IP-адрес. Они всегда находятся на одном и том же wan IP-адресе в заданное время, но на разных портах.

Я подключаюсь к серверу А таким образом:

ssh -p 22001 [email protected]

и на сервер Б:

ssh -p 22002 [email protected]

Таким образом, я получаю 2 разных ключа хоста для одного и того же IP-адреса, а также когда IP-адрес меняет даже другой IP-адрес для одного и того же хоста.

Мне приходится снова и снова удалять другой ключ или старый ключ (в случае изменения IP) в файле known_hosts.

Я не решаюсь отключить проверку ключа, потому что это будет менее безопасно. Но получать постоянное предупреждение тоже небезопасно (потому что я тогда такие предупреждения постоянно игнорирую). Есть ли лучшее решение?

Это связано с моим старым вопросом здесь, но не то же самое:

Предупреждающее сообщение о входе в SSH на сервере с 2 DNS имена


person user89021    schedule 09.04.2009    source источник
comment
почему это было закрыто вместо перехода к SuperUser или Unix и Linux< /а>?   -  person Doktor J    schedule 08.09.2017


Ответы (1)


Я думаю, это сработает:

Создайте файл config в каталоге .ssh следующим образом:

Host server1
  Hostname x1.example.com
  HostKeyAlias server1
  CheckHostIP no
  Port 22001
  User karl

Host server2
  Hostname x2.example.com
  HostKeyAlias server2
  CheckHostIP no
  Port 22002
  User karl

Объяснение ниже (от man ssh_config)

ПроверитьHostIP

Если для этого флага установлено значение «да», ssh(1) дополнительно проверит IP-адрес хоста в файле known_hosts. Это позволяет ssh определить, изменился ли ключ хоста из-за спуфинга DNS. Если для параметра установлено значение «нет», проверка не будет выполнена. По умолчанию "да".

Псевдоним ключа хоста

Указывает псевдоним, который следует использовать вместо реального имени хоста при поиске или сохранении ключа хоста в файлах базы данных ключей хоста. Этот параметр полезен для туннелирования соединений SSH или для нескольких серверов, работающих на одном хосте.

Строка Username и Port избавляет вас от необходимости указывать эти параметры в командной строке, поэтому вы можете просто использовать:

% ssh server1
% ssh server2
person Alnitak    schedule 09.04.2009
comment
Это так круто! Отлично работает, спасибо! - person user89021; 09.04.2009
comment
Просто интересно: есть ли способ сохранить ssh IP-адрес и порт в known_hosts? IIUC, это обеспечит некоторую защиту от спуфинга DNS, верно? - person Hbf; 19.04.2012
comment
@Hbf в моей системе MacOS X порт (если он нестандартный) хранится в known_hosts. - person Alnitak; 19.04.2012
comment
Не уверен, что это недавняя разработка, но OpenSSH, по крайней мере, с версии 5.9 распознает host:22001 и host:22002 как два отдельных хоста; таким образом, нет предупреждения REMOTE HOST KEY HAS CHANGE. - person Piskvor left the building; 21.01.2016
comment
Один из способов разрешить обнаружение спуфинга — указать отдельный файл UserKnownHosts для каждого порта на одном и том же IP-адресе в записях конфигурации сервера. - person parity3; 07.09.2016