Короче говоря: большая старая корпорация, множество серверов UNIX / Linux.
Я унаследовал ответственность за несколько сценариев, которые вышли несколько лет назад. Одним из них был скрипт, который будет запускаться каждые $ X месяцев, чтобы глобально обновить пароль root на всех наших серверах.
Этот скрипт представляет собой беспорядок в Shell Script и Expect, и он работает на уровне доверия SSH, который устанавливается между всеми нашими серверами и центральным сервером управления и контроля.
Проблема в том, что сценарий представляет собой гигантский беспорядок. Команды Expect пытаются учесть каждую возможную версию «passwd», которая существует на любом компьютере под управлением UNIX / Linux, - и они сильно различаются.
Поскольку мы расширяем и модернизируем большую часть нашей инфраструктуры, сценарий становится действительно неуправляемым.
Мой вопрос: есть ли лучший способ сделать это? Предполагая, что уже установлено доверие SSH, каков наилучший способ изменить пароль root на 3000+ серверах одновременно?
sudo
и удаление корневых паролей вообще не вариант, не так ли?Ответы:
Используйте Кукольный .
Puppet очень гибок, прост в обслуживании и использует SSL. Возможно, это звучит немного излишне, и вам придется приложить дополнительные усилия для создания системы Puppet.
Но. Скорее всего, это не последнее массовое обновление, которое вы будете делать с этими машинами. Puppet сэкономит вам много времени, когда начнется любая процедура массового обновления, и сценарии будут очень удобочитаемыми / многократно используемыми.
По крайней мере, это сработало для меня несколько лет назад, и все же я могу повторно использовать некоторые из этих рецептов Кукол (так называемые сценарии). Я также использовал его в немного меньших средах, просто чтобы убедиться, что у каждой машины есть известное состояние .
Я много раз доказывал (во многих компаниях), что все настраиваемые сценарии развертывания становятся болью в заднице через некоторое время или когда вмешивается следующий парень. И пока вы носите мобильный телефон, старые сценарии будут преследовать вас.
Если вы думаете, что это действительно звучит хорошо, вот отличный учебник Puppet с виртуальной средой, включенной, чтобы вы начали.
источник
user{"root":}
пароль для установки пароля. Вместо этого используйтеexec{"chpasswd -e ..."}
, что намного безопаснее.pip install ansible
в окне GNU / Linux создайте список хостов иansible -m user -a "password=$crpyt"
. Агенты не нужны. Управляет GNU / Linux, AIX и Solaris из коробки.Я использовал модуль Perl Authen :: PAM в Solaris с большим успехом. Вот пример сценария:
источник
Если вы можете написать Perl, модуль Net :: OpenSSH :: Parallel позволяет писать сценарии, которые выполняют действия параллельно на удаленных хостах через SSH довольно легко.
Он содержит пример скрипта для смены паролей, который вы можете использовать в качестве базы. Поскольку кажется, что у вас гетерогенная среда, вы хотели бы сгруппировать хосты по типу и использовать разные подпрограммы обработки диалога для каждого.
источник
Я не знаю, что такое «лучший», и возможно ли это для всех машин, отличных от Linux * nix, в вашем миксе, но вы рассматривали puppet или cfengine для этого вида деятельности?
Существуют также коммерческие (очень дорогие) инструменты для управления идентификацией, два из которых я видел / использовал в прошлом: Oracle Identity Manager и эквивалент Novel.
источник
Продолжив исследовать это, я узнал несколько вещей ...
Прежде всего, это действительно раздражающая задача для автоматизации, особенно в разных средах. Самый правильный ответ на этот вопрос, вероятно, @ tomi's: используйте Puppet.
В конце концов, я надеюсь, что Puppet сможет управлять инфраструктурой, но развертывание на всех серверах UNIX всего предприятия для смены пароля root сейчас не представляется возможным.
Прочитав много man-страниц и множество Google-фу, мне удалось придумать скрипт, который просматривает список целевых серверов, открывает SSH-соединение и выполняет одно из следующих действий:
Это намного больше, чем выполнение только этих команд, но те, что выше, работают с магией.
Я не мог найти простой способ без итеративного изменения пароля в Solaris, поэтому мы обратились к изменению
/etc/shadow
на лету.источник
/dev/null
прежде чем сделать это.Недавно я сделал это, используя Bash Script.
источник
Это мое решение до сих пор. еще нужно посмотреть, работает ли он на нескольких системах
источник
Вы можете использовать pdsh для выполнения вашей команды на нескольких хостах одновременно.
источник
passwd
отличается на разных упомянутых версиях.pw
не всегда доступно ....passwd
всегда интерактивно для пользователя.passwd
на RHEL Linux, по крайней мере, имеет--stdin
параметрВ дополнение к puppet: SaltStack Другой подход - автоматизировать выполнение с использованием библиотек SSH либо последовательно, либо параллельно, используя Fabric http://docs.fabfile.org/en/1.6/ , Capistrano или аналогичные, которые не требуют много времени / усилий для развертывания.
источник
Два варианта:
Используйте марионетку
Используйте беговую колоду. Run deck - это сервер, который позволяет вам одновременно выполнять команды на сотнях машин. Вы можете сгруппировать машины в группы, чтобы выполнять команды только на подмножестве машин.
http://rundeck.org
источник
Я думаю, что формат
/etc/shadow
файла довольно стандартный в дистрибутивах Linux. Можете ли вы просто написать простой сценарий awk для обновления пароля.cat /etc/shadow| awk -v pass='NEWPASSHASH' -v now=`date '+%s'` 'BEGIN{ OFS=FS=":"} /^root/ {$2=pass; $3=now} {print}' > /tmp/shadow && mv /tmp/shadow /etc/shadow
Я бы проверил это, чтобы вы не закрылись;)
источник