Как можно поддерживать know_hosts SSH в актуальном состоянии (полубезопасно)?

Как можно поддерживать know_hosts SSH в актуальном состоянии (полубезопасно)?

Просто чтобы сразу это обозначить, чтобы мне не говорили этого не делать:

  1. Все эти машины находятся в локальной сети, практически не имея доступа к Интернету (они даже не имеют надлежащего подключения к корпоративной сети).
  2. У каждого, кто может организовать атаку типа «человек посередине», уже есть права root на машине.
  3. Машины переустанавливаются в рамках процедур контроля качества, поэтому важно иметь новые ключи хоста (нам нужно посмотреть, как отреагируют другие машины); я просто пытаюсь сделать свою машину более удобной в использовании.

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

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

Как бы вы автоматизировали этот процесс?

решение1

В зависимости от причин переустановки/IP-адресов, которые остаются прежними, я бы рассмотрел настройку «StrictHostKeyChecking» в ~/.ssh/config для определенных хостов/IP-адресов/шаблонов.

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

решение2

Если вы используете систему управления конфигурацией, например Puppet, вы можете использовать ее, чтобы она обновляла /etc/ssh/ssh_known_hostsфайл с хостами, пока клиентские машины проверяют центральный сервер. Затем вы можете включить StrictHostKeyCheckingопцию в файле конфигурации.

Именно это мы и делаем с нашими экземплярами Amazon EC2, которые регистрируются на нашем главном сервере Puppet. У нас есть сервер puppet, который служит бастионом jumpbox для наших экземпляров EC2 и является единственной машиной, которой разрешено подключаться к ним по SSH. Затем мы обновляем файл /etc/ssh/ssh_known_hostsс помощью ключей хоста и /etc/hostsфайла для обновления публичного IP-адреса DNS EC2.

решение3

Вам нужен ssh-keyscan, который распространяется вместе с openssh. Изстраница руководства:

 ssh-keyscan is a utility for gathering the public ssh host keys of a num‐
 ber of hosts.  It was designed to aid in building and verifying
 ssh_known_hosts files. 

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

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

решение4

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

В качестве альтернативы вы можете использовать какой-либо инструмент управления конфигурацией, напримерCFengineилиКукольныйдля распространения авторитетного файла /etc/ssh/ssh_known_hostsвсем клиентам на вашем сайте. (OpenSSH проверяет, /etc/ssh/ssh_known_hostsнет ли соответствующей записи в ~/.ssh/known_hosts.)

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