Linux - uruchamianie tego samego polecenia na wielu komputerach jednocześnie

39

Mam około tuzina Linux-ów, które czasami muszę uruchamiać te same polecenia. Czy jest łatwiejszy (lub zautomatyzowany) sposób, aby to zrobić, oprócz zalogowania się na każdym komputerze i uruchomienia polecenia, pojedynczo? To nie są te same polecenia przez cały czas i nie są ustawione wcześniej, więc nie jest to coś idealnego dla narzędzi takich jak cron.

Chris Bunch
źródło
podobne pytanie serverfault.com/questions/17931/…
hayalci
Wreszcie lista kanoniczna :)
rogerdpack

Odpowiedzi:

12

Hm, może pconsole to narzędzie, którego chcesz.

Węzeł
źródło
Wow, pconsole wygląda całkiem fajnie! Nie zainstalowałem go bez problemu i na razie wygląda świetnie. Dzięki!
Chris Bunch
To także jedno z moich ulubionych narzędzi. :) np
Node
15

Istnieje również ClusterSSH , który, cóż, robi dokładnie to, co myślisz. Tak, nazywanie opisowe!

Jörg W Mittag
źródło
404 na SourceForge, wygląda na to, że jest teraz na GitHub .
Pablo A,
8

Powinieneś sprawdzić Puppet tutaj jest linux.com artykuł na temat jego konfiguracji i użytkowania

trent
źródło
1
Hmm, Puppet wygląda całkiem interesująco. Przyjrzę się temu, jeśli konsola zacznie mnie zawodzić, ponieważ już go uruchomiłem i jest to łatwiejsze niż nauka języka Puppet. Dziękuję za sugestię!
Chris Bunch
W szczególności narzędzie Marionette Collective (zwane również mcollective lub mco). Jest to część kukiełki, która pozwala robić rzeczy na grupie gospodarzy, w oparciu o fakty kukiełkowe.
Brian Minton
8

Możesz spróbować Capistrano . Początkowo jest to narzędzie do wdrażania Rails, ale rozwinęło się, aby robić wiele rzeczy ze zdalnymi maszynami.

Aby uzyskać pełniejsze podejście do administrowania wieloma komputerami, możesz spróbować szefa kuchni .

rkj
źródło
8

Ansible ma możliwość wykonywania poleceń ad hoc, a także można go rozbudowywać w celu pełnego zarządzania konfiguracją. Możliwość dopasowania na podstawie grup jest doskonała.

http://docs.ansible.com/intro_adhoc.html

Robert
źródło
ansibledziała dobrze z setkami maszyn naraz lub można ograniczyć go do n komputerów jednocześnie
pisklęta
6

Myślę, że skopiuję i wkleję moją odpowiedź z Stack Overflow , która wydawała się podobać ludziom. . .


Kwestia, jak uruchamiać polecenia na wielu serwerach naraz, pojawiła się na liście dyskusyjnej Perla innego dnia i dam ci tę samą rekomendację, którą tam podałem , a mianowicie użycie gsh: http://outflux.net/unix/ oprogramowanie / gsh

gsh jest podobny do for box in box1_name box2_name box3_namejuż podanego rozwiązania, ale uważam, że gsh jest wygodniejszy. Ustawiasz plik / etc / ghosts zawierający twoje serwery w grupach takich jak web, db, RHEL4, x86_64 lub cokolwiek (duchy człowieka), a następnie używasz tej grupy, gdy wywołujesz 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 ~]$

Możesz także łączyć lub dzielić grupy duchów, na przykład używając web + db lub web-RHEL4.

Wspomnę również, że chociaż nigdy nie korzystałem z shmux, jego strona internetowa zawiera listę oprogramowania (w tym gsh), które pozwala na uruchamianie poleceń na wielu serwerach jednocześnie. Capistrano został już wspomniany i (z tego, co rozumiem) może również znajdować się na tej liście.

Philip Durbin
źródło
5

Jeśli korzystasz z pulpitu KDE, konsola ma opcję „Wyślij dane wejściowe do wszystkich sesji”. Dotyczy wszystkich sesji otwartych w tym samym oknie konsoli.

rgmarcha
źródło
5

Możesz także spróbować ssh [user@]hostname [command]przejrzeć nazwy hostów.

Jason V.
źródło
2
To tak naprawdę nie spełnia części „naraz” (jest serializowane, a nie równolegle), ale ponieważ nie wydaje się to być wymogiem ze strony pytania, może to być również dobre rozwiązanie.
voretaq7,
4

Zobacz także func. Func pozwala używać architektury modułów do kontrolowania różnych aspektów systemu, od obsługi pakietów, uruchamiania poleceń itp. Działa na module klient / serwer przez SSL i ma również dość elastyczny schemat uwierzytelniania.

Kij
źródło
Wraz z tym Redc buduje Func i prawdopodobnie pojawi się szersze zastosowanie w przyszłych produktach Fedora / RHEL. Na pewno jest to do obejrzenia, ponieważ spodziewam się, że stanie się de facto standardowym rozwiązaniem tego typu problemów.
Christopher Cashell
4

Użyłem ClusterSSH i działa. Jednak poza pewną liczbą terminali nie skaluje się dobrze.

Dziwię się, że nikt nie wspomniał o Xargs. Xargs jest idealny do większości rzeczy. Tak naprawdę czułam się z tym tak dobrze, że nigdy więcej nie używam klastrów.

Przykład

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(Uruchom ponownie apache na wszystkich hostach internetowych).

JDS
źródło
dla obserwujących ta -P30część oznacza „uruchom 30 z nich równolegle”
rogerdpack,
4

Jeśli jesteś już użytkownikiem tmux, możesz polubić tmux-cssh (skrót TMUX-C(luster)-SSH). Dajesz mu listę nazw serwerów i otwiera nowe okno tmux z sesją SSH otwartą dla każdego serwera we własnym okienku. Wszystkie naciśnięcia klawiszy są kopiowane do każdego okna. W zależności od liczby hostów dane wyjściowe mogą być trudne do odczytania.

appleshampoo
źródło
1
Łącza jednego linera niekoniecznie są przydatne. Proszę opisowo. Dlaczego polecasz to narzędzie?
Deer Hunter,
3

Inne narzędzia to:

RunDeck może być również opisany jako lekki ControlTier.

Narzędzia te zapewniają nie tylko powłokę klastra, ale także interfejs WWW i możesz zapisać swoje zadania do wykorzystania w przyszłości.

chrześcijanin
źródło
2

Możesz także wypróbować Cluster SSH (cssh). Nie korzystałem z niego, ale na stronie LinuxJournal.com znajduje się artykuł zatytułowany „Wydajnie zarządzaj wieloma serwerami”.

Brad Beyenhof
źródło
1

Używaj anteny , prostej i bardzo mocnej! Ten skrypt zmienił moje życie :) Jeden skrypt rządzi nimi wszystkimi!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

„Antena” powłoki staranności wykonuje polecenia za pośrednictwem ssh / rsh / telnet / mysql jednocześnie w kilku systemach. Zmiana hasła, aktualizacja konfiguracji, kopiowanie plików, sprawdzanie stanu itp. Na setkach węzłów jest wtedy prosta. Antena jest podobna do „dsh” IBM (powłoki rozproszonej), ale ponadto umożliwia zdalne wykonywanie poleceń wymagających uwierzytelnienia. W porównaniu z innymi pakietami typu open source, które zawierają rozproszoną powłokę (lub podobne narzędzia), takie jak ClusterIt, powłoka tancerza, równoległa rozproszona powłoka lub C3, antena jest cienkim i łatwym w użyciu zdalnym opakowaniem w przypadku, gdy potrzebne jest elastyczne rozwiązanie. Możesz przeglądać stronę podręcznika anteny on-line tutaj.

Guillaume
źródło
1

Oto kilka przykładów użycia poleceń wymienionych w innych odpowiedziach:

pdsh

Może przyjmować zakresy liczbowe, wyjścia z nazwą hosta jako pierwsze, wydaje się faktycznie utrzymane :

najprostsza wersja:

pdsh -w hostname echo done

wydajność:

hostname: done

Bardziej skomplikowany przykład:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

wydajność:

hostname8: done
hostname7: done
otherhost: done

prochowiec: brew install pdsh

dsh

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

potrzebujesz zdalnego ustawienia powłoki, inaczej użyje „rsh”, który może, ale nie musi być dostępny.

prochowiec: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

Wszyscy mogą opcjonalnie również pobrać listę komputerów z pliku.

Dodaj tutaj więcej przykładów, jest to wiki społeczności

prochowiec: brew install pssh

Klaster SSH

Cluster SSH („wersja Mac” najwyraźniej istnieją dwie wersje, druga jest tutaj ) faktycznie otwiera „prawdziwe terminale” z dużym terminalem na dole, który wysyła dane wejściowe do wszystkich pozostałych. To jest jak interfejs użytkownika, który wysyła go do wielu.

Dawny:

csshX hostname0[1-2] hostname3 następnie wpisz w czerwone pole i przejdzie do każdego okna terminala, po jednym dla każdego hosta, które się pojawi.

mac: brew install csshx(stara wersja, ale nadal działa)

istnieje również brew install ansibleFWIW

rogerdpack
źródło