У меня есть около десятка Linux-боксов, которые мне иногда нужны для запуска одной и той же команды. Есть ли более простой (или автоматизированный) способ сделать это, кроме входа на каждую машину и запуска команды, по одной за раз? Это не одни и те же команды все время, и это не в заданное время, поэтому это не что-то идеальное для таких инструментов, как cron
.
linux
remote-access
Крис Банч
источник
источник
Ответы:
Хм, может быть, pconsole это инструмент, который вы хотите.
источник
Есть также ClusterSSH , который, в общем-то , делает именно то, что вы думаете. Yay для наглядного именования!
источник
Вы должны проверить Puppet вот статья linux.com о его настройке и использовании
источник
Не забывайте также о pssh и dsh ; они оба очень похожи на gsh, о котором упоминал @Philip Durbin.
источник
Вы можете попробовать Capistrano . Первоначально это был инструмент развертывания Rails, но он стал много делать с удаленными машинами.
Для более полного подхода к администрированию нескольких машин вы можете попробовать Chef .
источник
Ansible имеет возможность выполнять специальные команды, а также может расширяться для полного управления конфигурацией. Возможность совпадения по группам отличная.
http://docs.ansible.com/intro_adhoc.html
источник
ansible
хорошо работает с сотнями машин одновременно, или вы можете ограничить его до n машин одновременноДумаю, я скопирую и вставлю свой ответ из Stack Overflow , что людям, похоже, понравилось. , ,
Вопрос о том, как запускать команды на многих серверах сразу, встал на днях в списке рассылки Perl, и я дам ту же самую рекомендацию, которую я дал там : использовать gsh: http://outflux.net/unix/ программное обеспечение / GSH
gsh похож на "
for box in box1_name box2_name box3_name
" решение, которое уже дано, но я считаю, что gsh более удобен. Вы настраиваете файл / etc / ghosts, содержащий ваши серверы в таких группах, как web, db, RHEL4, x86_64 или что-то еще (man ghosts), а затем используете эту группу при вызове gsh.Вы также можете объединить или разделить группы призраков, например, используя web + db или web-RHEL4.
Я также упомяну, что хотя я никогда не использовал shmux, его веб-сайт содержит список программного обеспечения (включая gsh), которое позволяет вам запускать команды на многих серверах одновременно. Capistrano уже упоминался и (насколько я понимаю) также может быть в этом списке.
источник
Если вы работаете на рабочем столе KDE, у konsole есть опция «Отправлять входные данные всем сеансам». Это относится ко всем сеансам, открытым в одном и том же окне консоли.
источник
Вы также можете попробовать,
ssh [user@]hostname [command]
а затем перебрать имена хостов.источник
Также взгляните на func. Func позволяет вам использовать модульную архитектуру для управления различными аспектами системы, от работы с пакетами до выполнения команд и т. Д. Он работает на клиент-серверном модуле по SSL и также имеет довольно гибкую схему аутентификации.
источник
Я использовал ClusterSSH, и он работает. Тем не менее, за пределами определенного количества терминалов, это не хорошо масштабируется.
Я удивлен, что никто не упомянул xargs. Xargs идеально подходит для большинства вещей. На самом деле, мне так удобно, что я больше никогда не использую clusterssh.
пример
(Перезапустите apache на всех веб-хостах.)
источник
-P30
часть означает «запустить 30 из них параллельно»Если вы уже являетесь пользователем tmux, вам может понравиться tmux-cssh (расшифровывается
TMUX-C(luster)-SSH
). Вы даете ему список имен серверов, и он открывает новое окно tmux с сеансом SSH, открытым для каждого сервера на его собственной панели. Все нажатия клавиш копируются в каждое окно. В зависимости от количества хостов вывод может быть трудным для чтения.источник
Другие инструменты:
RunDeck также может быть описан как облегченный ControlTier.
Эти инструменты дают вам не только оболочку кластера, но и веб-интерфейс, и вы можете сохранить свои рабочие места для будущего использования.
источник
Вы также можете попробовать Cluster SSH (cssh). Я не использовал его, но на LinuxJournal.com есть статья под названием «Эффективное управление несколькими серверами», в которой говорится об этом.
источник
Используйте блюдо , простое и очень мощное! Этот сценарий изменил мою жизнь :) Один сценарий, чтобы управлять ими всеми!
http://nic-nac-project.org/~drimiks/gnu/dish.shtml
Оболочка diligence 'dish' выполняет команды через ssh / rsh / telnet / mysql одновременно в нескольких системах. Смена пароля, обновление конфигурации, копирование файлов, проверка статуса и т. Д. На сотнях узлов становятся проще. Блюдо похоже на 'dsh' (распределенная оболочка) IBM, но, кроме того, позволяет удаленно выполнять команды, требующие аутентификации. По сравнению с другими пакетами с открытым исходным кодом, которые включают в себя распределенную оболочку (или аналогичные инструменты), такие как ClusterIt, оболочка танцора, параллельная распределенная оболочка или C3, блюдо является тонкой и простой в использовании оболочкой удаленной оболочки для случаев, когда требуется гибкое решение. Вы можете просмотреть страницу руководства блюда онлайн здесь.
источник
Вот несколько примеров использования команд, упомянутых в других ответах:
pdsh
Может принимать числовые диапазоны, выходные данные с именем хоста сначала, кажется, фактически поддерживается :
самая простая версия:
pdsh -w hostname echo done
выход:
Более сложный пример:
pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"
выход:
макинтош:
brew install pdsh
DSH
dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"
нужна настройка удаленной оболочки, иначе он будет использовать «rsh», который может быть, а может и не быть доступным.
макинтош:
brew install dsh
pssh
pssh -i -H user@host -H user@host "sleep 5 && echo done"
Все они могут взять список машин из файла, по желанию, а также.
Не стесняйтесь добавлять больше примеров здесь, это вики сообщества
макинтош:
brew install pssh
Кластер SSH
Кластерный SSH («версия только для Mac», по-видимому, есть две версии, другая здесь есть ) фактически открывает «реальные терминалы» с большим терминалом внизу, который отправляет входные данные всем остальным. Так что это как пользовательский интерфейс, который отправляет его нескольким.
Пример:
csshX hostname0[1-2] hostname3
затем введите в красное поле, и оно будет отображаться в каждом окне терминала, по одному на хост, чтобы оно всплыло.Mac:
brew install csshx
(старая версия, но все еще работает)есть также
brew install ansible
FWIWисточник