SSH в Linux: отключение проверки ключа хоста для хостов в локальной подсети (known_hosts) - PullRequest
41 голосов
/ 01 ноября 2009

Я работаю в сети, где системы с IP-адресами часто меняются. Они включаются и выключаются в рабочей среде, и DHCP определяет IP-адрес, который они получают.

Непонятно, как отключить кэширование / проверку ключей хоста, чтобы мне не приходилось редактировать ~ / .ssh / known_hosts каждый раз, когда мне нужно подключиться к системе.

Меня не волнует аутентичность хоста, все они в сегменте сети 10.x.x.x, и я относительно уверен, что никто не MITM'с меня.

Есть ли "правильный" способ сделать это? Меня не волнует, предупреждает ли меня это, но остановка и заставляющая меня сбрасывать мою запись known_hosts для этого IP-адреса каждый раз, раздражает, и в этом сценарии это действительно не обеспечивает никакой безопасности, потому что я редко подключаюсь к системам более одного или двух раз а затем IP передается другой системе.

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

Из поиска я нашел несколько очень сильных мнений по этому вопросу, начиная от «Не связывайтесь с этим, это ради безопасности, просто разберитесь с этим» до «Это самая глупая вещь, с которой мне приходилось иметь дело Я просто хочу его выключить "... Я где-то посередине. Я просто хочу иметь возможность выполнять свою работу без необходимости чистить адрес из файла каждые несколько минут.

Спасибо.

Ответы [ 5 ]

87 голосов
/ 21 февраля 2011

Это конфигурация, которую я использую для наших постоянно меняющихся хостов EC2:

maxim@maxim-desktop:~$ cat ~/.ssh/config 
Host *amazonaws.com
        IdentityFile ~/.ssh/keypair1-openssh
        IdentityFile ~/.ssh/keypair2-openssh
        User ubuntu
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null

Это отключает подтверждение хоста StrictHostKeyChecking no, а также использует приятный хак для предотвращения ssh от сохранения идентификатора хоста в постоянном файле UserKnownHostsFile /dev/null. Обратите внимание, что в качестве добавленного значения я добавил пользователя по умолчанию, с которым он подключается к хост и возможность попробовать несколько различных идентификаторов закрытых ключей.

9 голосов
/ 02 ноября 2009

Если вы используете OpenSSH, я полагаю, вы можете установить

CheckHostIP no

опция для предотвращения проверки IP-адресов хоста в known_hosts. Со страницы руководства:

CheckHostIP

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

8 голосов
/ 11 апреля 2011

Мне понадобилось время, чтобы найти. Наиболее распространенный вариант использования, который я видел, это когда у вас есть SSH-туннели для удаленных сетей. Все решения, приведенные здесь, вызывали предупреждения, которые нарушали мои сценарии Nagios.

Мне нужна была опция:

NoHostAuthenticationForLocalhost yes

Что, как следует из названия, применимо только к localhost.

2 голосов
/ 29 октября 2014

Если вы хотите отключить это временно или без необходимости изменения файлов конфигурации SSH, вы можете использовать:

ssh -o UserKnownHostsFile=/dev/null username@hostname
1 голос
/ 18 ноября 2015

Так как каждый второй ответ объясняет, как отключить проверку ключа, вот две идеи, которые сохраняют проверку ключа, но избегают проблемы:

  1. Использовать имена хостов. Это легко, если вы управляете сервером DHCP и можете назначать собственные имена. После этого вы можете просто использовать известные имена хостов, смена ips не имеет значения.

  2. Использовать имена хостов. Даже если вы не управляете сервером DHCP, вы можете использовать службу типа avahi, которая будет транслировать имя сервера в нашей локальной сети. Он заботится о решении столкновений и других проблем.

  3. Использовать подпись ключа хоста. После того, как вы построили машину, подпишите ее локальным центром сертификации (для этого вам не нужен глобальный доверенный центр сертификации). После этого вам не нужно доверять каждому хосту отдельно на вашей машине. Достаточно, чтобы вы доверяли подписывающему CA в файле known_hosts. Более подробную информацию можно найти на справочной странице ssh-keygen или на многих постах в блоге (https://www.digitalocean.com/community/tutorials/how-to-create-an-ssh-ca-to-validate-hosts-and-clients-with-ubuntu)

...