Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

Вы хотите 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. Это делает вас уязвимым для атак типа "злоумышленник посередине", хотя в вашей среде это может не беспокоить.

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

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