Как редактировать known_hosts, если несколько хостов имеют одинаковый IP-адрес и DNS-имя?

Как редактировать known_hosts, если несколько хостов имеют одинаковый IP-адрес и DNS-имя?

Я регулярно подключаюсь по ssh к компьютеру, который является компьютером с двойной загрузкой OS X / Linux. Два экземпляра ОС не используют один и тот же ключ хоста, поэтому их можно рассматривать как два хоста, использующих один и тот же IP и DNS. Допустим, IP — 192.168.0.9, а имена — hostnameиhostname.domainname

Насколько я понял, решение для подключения к двум хостам — добавить их оба в ~/.ssh/know_hostsфайл. Однако это легче сказать, чем сделать, поскольку файл хэширован и, вероятно, имеет несколько записей на хост ( 192.168.0.9, hostname, hostname.domainname). В результате у меня есть следующее предупреждение

Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'

Есть ли простой способ редактировать known_hostsфайл, сохраняя хэши. Например, как найти строки, соответствующие заданному hostname? Как сгенерировать хэши для некоторых известных хостов?

Идеальное решение позволило бы мне беспрепятственно подключаться к этому компьютеру с помощью ssh, независимо от того, называю ли я его 192.168.0.9, hostnameили hostname.domainname, и использует ли он свой ключ хоста Linux или свой ключ хоста OSX. Однако я все равно хочу получать предупреждение, если происходит настоящая атака типа «человек посередине»,то естьесли используется другой ключ, нежели эти два.

решение1

Самое простое решение здесь — просто использовать те же самые ключи хоста для Linux и OS X. То есть, выбрать один набор /etc/ssh/ssh_host_*_key*файлов и скопировать их в другую ОС. Затем тот же самый ключ хоста будет представлен клиенту SSH независимо от того, в какую ОС вы загрузились, и клиент SSH не будет знать об этом.

решение2

Как предположил @Izzy в комментарии выше, ssh сообщает вам о проблемной строке, и если удалить эту строку (сохранив ее в другом месте), принять новый ключ, а затем скопировать удаленную строку обратно, то вы получите два ключа для одного и того же хоста, и ssh примет любой из них.

(Вы также можете использовать его ssh-keygen -H -F <hostname>для поиска строк в файле known_hosts, которые соответствуют этому имени хоста. Запуск этого после копирования удаленной строки должен вывести две записи.)

Если кто-нибудь знает, как заставить PuTTY делать то же самое, мне было бы очень интересно услышать об этом.

решение3

Я нашел то, что может помочь вам в достижении желаемого.

Источник:https://stackoverflow.com/questions/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but

Создайте файл конфигурации в каталоге .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

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

HostKeyAlias

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

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

% ssh server1
% ssh server2

решение4

Я не сталкиваюсь с такой проблемой при подключении к разным VPS-серверам, использующим один и тот же IP-адрес, поскольку у каждого из них свой порт SSH (20022, 30022 и т. д.), поэтому они зарегистрированы как известные хосты с разными ключами.

Может ли это стать для вас обходным решением?

Связанный контент