%3F.png)
Просто чтобы сразу это обозначить, чтобы мне не говорили этого не делать:
- Все эти машины находятся в локальной сети, практически не имея доступа к Интернету (они даже не имеют надлежащего подключения к корпоративной сети).
- У каждого, кто может организовать атаку типа «человек посередине», уже есть права root на машине.
- Машины переустанавливаются в рамках процедур контроля качества, поэтому важно иметь новые ключи хоста (нам нужно посмотреть, как отреагируют другие машины); я просто пытаюсь сделать свою машину более удобной в использовании.
Я делаю много переустановок на машинах, которые меняют их ключи хоста. Это требует зайти ~/.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
.)