Подтвердить что ты не робот

SSH в Linux: отключение проверки ключа хоста для хостов в локальной подсети (known_hosts)

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

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

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

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

[email protected]:~$ 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. Обратите внимание, что в качестве добавленного значения я добавил пользователя по умолчанию, с которым можно подключиться к хост и возможность попробовать несколько разных идентифицировать закрытые ключи.

Ответ 2

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

CheckHostIP no

чтобы запретить проверку IP-адресов хостов в known_hosts. На странице man:

CheckHostIP

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

Ответ 3

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

Мне нужен был вариант:

NoHostAuthenticationForLocalhost yes

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

Ответ 4

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

ssh -o UserKnownHostsFile=/dev/null [email protected]

Ответ 5

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

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

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

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