У меня около дюжины компьютеров с Linux, на которых мне иногда нужно запускать одни и те же команды. Есть ли более простой (или автоматический) способ сделать это, помимо входа в систему на каждой машине и выполнения команды по очереди? Это не одни и те же команды все время и не в заранее установленное время, поэтому это не что-то идеальное для таких инструментов, как cron
.
Есть также ClusterSSH, который, ну, делает именно то, что вы думаете. Ура за описательное именование!
Хм, может быть pconsole это тот инструмент, который вам нужен.
Ansible может выполнять специальные команды, а также расширяется для полного управления конфигурацией. Возможность сопоставления по группам отличная.
Вы можете попробовать Capistrano. Первоначально это был инструмент развертывания Rails, но он вырос для многих задач с удаленными машинами.
Для более полного подхода к администрированию нескольких машин вы можете попробовать Повар.
Вы должны проверить Puppet на сайте linux.com статья по его настройке и использованию
Думаю, я скопирую и вставлю мой ответ от Stack Overflow, который, похоже, понравился людям. . .
Вопрос о том, как запускать команды на многих серверах одновременно, поднялся на днях в списке рассылки Perl, и я дам ту же рекомендацию. Я дал там, который должен использовать gsh: http://outflux.net/unix/software/gsh
gsh похож на "for box in box1_name box2_name box3_name
"решение уже дано, но я считаю, что gsh более удобен. Вы настраиваете файл / etc / ghosts, содержащий ваши серверы в группах, таких как web, db, RHEL4, x86_64 или что-то в этом роде (man ghosts), затем вы используете эту группу, когда вы позвоните в gsh.
[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$
Вы также можете объединять или разделять фантомные группы, например, используя web + db или web-RHEL4.
Я также упомяну, что, хотя я никогда не использовал shmux, свой сайт содержит список программного обеспечения (включая gsh), которое позволяет запускать команды одновременно на многих серверах. Capistrano уже упоминалось и (насколько я понимаю) тоже может быть в этом списке.
Вы также можете попробовать ssh [user@]hostname [command]
а затем перебрать имена хостов.
Если вы находитесь на рабочем столе KDE, консоль есть опция «Отправить ввод для всех сеансов». Он применяется ко всем сеансам, открытым в одном окне консоли.
Если вы уже являетесь пользователем tmux, вам может понравиться tmux-cssh (означает TMUX-C(luster)-SSH
). Вы даете ему список имен серверов, и он открывает новое окно tmux с сеансом SSH, открытым для каждого сервера в его собственной панели. Все нажатия клавиш копируются в каждое окно. В зависимости от количества хостов вывод может быть трудночитаемым.
Я использовал ClusterSSH, и он работает. Однако за пределами определенного количества терминалов он плохо масштабируется.
Я удивлен, что никто не упомянул xargs. Xargs идеально подходит для большинства задач. На самом деле, я настолько освоился с этим, что больше не использую clusterssh.
пример
echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"
(Перезапустите apache на всех веб-хостах.)
Также обратите внимание на func. Func позволяет использовать модульную архитектуру для управления различными аспектами системы, от работы с пакетами до выполнения команд и т. Д. Он работает с модулем клиент / сервер через SSL и также имеет довольно гибкую схему аутентификации.
Другие инструменты:
RunDeck также можно было бы описать как облегченный ControlTier.
Эти инструменты предоставляют вам не только оболочку кластера, но и веб-интерфейс, и вы можете сохранять свои рабочие места для использования в будущем.
Вы также можете попробовать Cluster SSH (cssh). Я не использовал его, но на LinuxJournal.com есть статья «Эффективное управление несколькими серверами», в которой говорится об этом.
Использовать блюдо, просто и очень мощно! Этот сценарий изменил мою жизнь :) Один сценарий, чтобы управлять ими всеми!
http://nic-nac-project.org/~drimiks/gnu/dish.shtml
Оболочка усердия «тарелка» выполняет команды через ssh / rsh / telnet / mysql одновременно в нескольких системах. Смена пароля, обновление конфигурации, копирование файлов, проверка статуса и т. Д. На сотнях узлов становится простой задачей. Dish похож на dsh (распределенную оболочку) IBM, но, кроме того, позволяет удаленно выполнять команды, требующие аутентификации. По сравнению с другими пакетами с открытым исходным кодом, которые включают распределенную оболочку (или аналогичные инструменты), такие как ClusterIt, оболочку танцора, параллельную распределенную оболочку или C3, блюдо является тонкой и простой в использовании оболочкой удаленной оболочки для случаев, когда требуется гибкое решение. Вы можете просмотреть страницу с инструкциями по блюду онлайн здесь.
Вот несколько примеров использования команд, упомянутых в других ответах:
Может принимать числовые диапазоны, выводит сначала имя хоста, на самом деле кажется поддерживается:
самая простая версия:
pdsh -w hostname echo done
вывод:
hostname: done
Более сложный пример:
pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"
вывод:
hostname8: done
hostname7: done
otherhost: done
mac: brew install pdsh
dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"
требуется настройка удаленной оболочки, иначе он будет использовать "rsh", который может быть, а может и не быть доступен.
mac: brew install dsh
pssh -i -H user@host -H user@host "sleep 5 && echo done"
Все они также могут брать список машин из файла.
Не стесняйтесь добавлять сюда больше примеров, это вики сообщества
mac: brew install pssh
Кластерный SSH («версия только для Mac», по-видимому, существует две версии, другая - Вот) фактически открывает «настоящие терминалы» с большим терминалом внизу, который отправляет данные всем остальным. Так что это похоже на пользовательский интерфейс, который отправляет его нескольким.
Пример:
csshX hostname0[1-2] hostname3
затем введите красное поле, и оно перейдет в каждое всплывающее окно терминала, по одному на каждый хост.
mac: brew install csshx
(старая версия, но все еще работает)
есть также brew install ansible
FWIW
Самый простой способ, который я нашел без установки или настройки большого количества программного обеспечения, - это использовать простой старый tmux. Скажем, у вас 9 серверов Linux. Выберите коробку в качестве основного. Запустите сеанс tmux:
tmux
Затем создайте 9 разделенных панелей tmux, проделав это 8 раз:
ctrl-b + %
Теперь SSH в каждое поле на каждой панели. Вам нужно знать некоторые ярлыки tmux. Для навигации нажмите:
ctrl+b <arrow-keys>
После того, как вы вошли во все свои ящики на каждой панели. Теперь включите синхронизацию панелей, где вы можете вводить одно и то же в каждое поле:
ctrl+b :setw synchronize-panes on
теперь, когда вы нажимаете любую клавишу, он будет отображаться на каждой панели. чтобы выключить, просто включите и выключите. для циклического изменения размеров панелей нажмите ctrl + b <пробел>.
Для меня это работает намного лучше, так как мне нужно видеть каждый вывод терминала, так как иногда серверы дают сбой или зависают по какой-либо причине при загрузке или обновлении программного обеспечения. Любые вопросы вы можете просто выделить и решить индивидуально.