Есть ли способ автоматизировать создание ключей SSH для большого количества (почти 9000) серверов почти для 30 пользователей?
Если у вас есть 9000 серверов под одним управлением, вы, вероятно, будете иметь некоторую форму управление конфигурацией на месте. Это может быть Puppet, Chef, Ansible и т. Д. Таким образом вы можете распространять открытые ключи.
Для 30 пользователей это также может быть выполнено с помощью аутентификации центрального каталога (LDAP, Active Directory).
Вы, наверное, делаете это неправильно.
Каждый пользователь (из 30) должен создать свой собственный (т.е. закрытый!) Ключ. Открытый ключ каждого пользователя поступает на каждый сервер (из 9000), к которому он должен иметь доступ.
Не делайте этого наоборот.
Если ваши серверы используют прилично последнюю версию openssh (я думаю,> 5.4), вам следует взглянуть на аутентификацию на основе сертификатов там. Вы найдете введение в эту функцию здесь: http://neocri.me/documentation/using-ssh-certificate-authentication/ или в документации пакета ssh.
Короче,
hth.
Я бы использовал Puppet для распространения общедоступных ключей хоста на все машины, чтобы пользователи могли входить в систему и не поддерживать файл known_hosts (если они используют SSH на этих 9000 машин).
Попросите каждый узел создать открытый / закрытый ключ. Безопаснее всего сгенерировать ключ на машине, которая его использует, чтобы закрытый ключ никогда не покидал хост и не нуждался в защите.
Используйте функцию «экспортированные ресурсы» Puppet, чтобы отправить закрытый ключ в центральную базу данных.
На всех узлах извлеките «экспортированные ресурсы», чтобы сгенерировать файл известных ключей хоста на этом компьютере. Любой новый узел появится во всех остальных узлах в течение двух прогонов марионеток.
Вот пример экспортированных ресурсов.
Вот конкретный пример распределения ключей хоста SSH.
Вы можете использовать Puppet, чтобы настроить файл sshd_config каждого хоста на доверие к ключам хоста и тому подобное, или к тому, что вы хотите, чтобы политика была:
augeas { 'sshd_config':
context => '/files/etc/ssh/sshd_config',
changes => [
'set PermitRootLogin without-password',
'set ANOTHERSETTING VALUE',
],
}
Puppet также может создать 30 учетных записей на всех машинах. я люблю модуль счетов который поставляется с Puppet Enterprise. Однако это легко сделать, если у вас есть версия с открытым исходным кодом. Вот пример того, как это сделать.
9000 машин - это большая среда. Вы захотите сохранить свои файлы Puppet в Git, использовать среду непрерывной интеграции и тестирования, такую как Jenkins CI, и иметь тестовую среду, которую вы опробуете, прежде чем нажимать. Как мы это делаем в Stack Exchange, Inc. задокументировано в этом сообщении в блоге.
Попросите каждого пользователя создать открытый / закрытый ключ.
Раздайте открытый ключ для каждого пользователя каждому серверу
Прибыль.
Если не считать шуток, это классическая проблема управления конфигурацией. Учтите, что помимо публикации ключа вам также необходимо создать как минимум домашний каталог и учетные записи пользователей, а также отдельные каталоги .ssh.
Вместо того, чтобы пытаться решить все 30/9000 сразу, я бы начал с автоматизации одного пользователя на одном сервере и строил оттуда.
См. В целом: Кукольный, Повар, Поваренная соль, Ansible для указателей.