Linux jest równoważny z pilotem PowerShell „jeden do wielu”

38

W administracji systemu Windows chcę głębiej kopać w systemie Linux (Debian). Jedno z moich palących pytań, na które nie mogłem odpowiedzieć podczas wyszukiwania w sieci (nie znalazłem go), brzmi: w jaki sposób mogę osiągnąć tak zwany „jeden do wielu” na odległość, jak w PowerShell dla Windows?

Aby rozbić to na podstawy, powiedziałbym:

Mój pogląd na Linuksa:

  • Mogę ssh na serwerze i wpisać moje polecenie
  • Dostaję wynik. Dla środowiska 10 serwerów musiałbym napisać skrypt (perl / python?) Wysyłający polecenie dla każdego z nich?

Moje doświadczenie z Windows:

  1. Wpisuję polecenie i za pomocą polecenia „invoke-command” mogę „wysłać” to na kilka serwerów (być może z pliku tekstowego), aby wykonać je jednocześnie i odzyskać wynik (jako obiekt do dalszej pracy).

  2. Mogę nawet ustanowić wiele sesji, połączenie jest utrzymywane w tle i selektywnie wysyłać polecenia do tych sesji oraz zdalnie włączać i wyłączać, jak potrzebuję.

(Słyszałem o szefie kuchni, marionetce itp. Czy to coś takiego?)


Update 2019:
Po wielu próbach - sugeruję Rex (patrz ten komentarz poniżej ) - łatwa konfiguracja (w rzeczywistości wymaga tylko ssh, nic więcej) i użycie (jeśli znasz tylko trochę perla , jest jeszcze lepsze, ale opcjonalne)
Z Rex (ify ) możesz wykonać polecenie adhoc i przejść do rzeczywistego zarządzania konfiguracją (... co oznacza: jest to CM na pierwszym miejscu, ale również nadaje się do zadań adhoc) Witryna wydaje się nieaktualna, ale obecnie (stan na 01/2019) jest w fazie aktywnego rozwoju, a kanał IRC jest również aktywny.

Z nowym openssh Windowsa jest jeszcze więcej możliwości

możesz spróbować: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

eli
źródło
równoległe ssh może to zrobić: serverfault.com/questions/2533/…
rogerdpack
MobaXTerm obsługuje „wielokrotne wykonywanie” w wielu sesjach ssh: mobaxterm.mobatek.net/features.html (przewiń w dół). Ponadto, jeśli podstawowym środowiskiem stacji roboczej jest system Windows, jest to również całkiem miłe narzędzie do łączenia się z urządzeniami z systemem Linux i nie tylko.
Kev
z tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
Eli

Odpowiedzi:

50

Podsumowanie

  • Ansible to narzędzie DevOps, które jest potężnym zamiennikiem PowerShell
  • RunDeck jako interfejs graficzny jest przydatny
  • Niektóre osoby używają RunDeck + Ansible razem

klastry

Do wysyłania zdalnych poleceń na kilka serwerów, dla początkujących, poleciłbym clusterssh

Aby zainstalować clustersshw Debianie:

apt-get install clusterssh

Kolejny samouczek klastrowania :

ClusterSSH to opakowanie Tk / Perl wokół standardowych narzędzi Linux, takich jak XTerm i SSH. Jako taki, będzie działał na prawie każdym systemie operacyjnym zgodnym z POSIX, w którym istnieją biblioteki - uruchomiłem go na Linux, Solaris i Mac OS X. Wymaga bibliotek Perla Tk (perl-tk na Debianie lub Ubuntu) i X11 :: Protocol (libx11-protokół-perl na Debianie lub Ubuntu), oprócz xterm i OpenSSH.

Ansible

Jeśli chodzi o zdalną platformę do administrowania wieloma systemami, Ansible jest bardzo interesującą alternatywą dla Puppet. Jest bardziej ubogi i nie potrzebuje dedykowanych zdalnych agentów, ponieważ działa na SSH (został również zakupiony przez RedHat)

Poradniki są bardziej rozbudowane niż opcje wiersza poleceń.

Jednak, aby rozpocząć korzystanie z Ansible, potrzebujesz prostej instalacji i ustawienia pliku tekstowego listy klientów.

Następnie uruchomienie polecenia na wszystkich serwerach jest tak proste, jak wykonanie:

ansible all -m command -a "uptime"

Dane wyjściowe są również bardzo ładnie sformatowane i rozdzielone według reguł / serwerów, a podczas działania w tle można przekierować do pliku i skonsultować się później.

Możesz zacząć od prostych reguł, a korzystanie z Ansible stanie się ciekawsze wraz z rozwojem Linuksa, a twoja infrastruktura stanie się większa. Jako taki zrobi znacznie więcej niż PowerShell.

Na przykład bardzo prosty Playbook do aktualizacji serwerów Linux, który napisałem:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

Ma również wiele zdefiniowanych modułów, które pozwalają łatwo pisać kompleksowe zasady.

Indeks modułu - Dokumentacja Ansible

Ma także interesującą oficjalną bazę / „społeczną” sieć repozytoriów do wyszukiwania już ustalonych polityk przez społeczność. Ansible Galaxy

Ansible jest również szeroko stosowany, aw github znajdziesz wiele projektów, takich jak ten ode mnie do konfiguracji FreeRadius .

Chociaż Ansible jest darmową platformą open source, ma również płatny interfejs panelu internetowego, Ansible Tower, chociaż licencje są dość drogie.

Obecnie, po zakupie RedHata, wieża ma również wersję open source znaną jako AWX .

Jako bonus Ansible jest również w stanie administrować serwerami Windows, chociaż nigdy tego nie używałem.

Jest także w stanie administrować sprzętem sieciowym (routerami, przełącznikami i zaporą ogniową), co czyni go bardzo interesującym rozwiązaniem jako rozwiązanie pod klucz automatyzacji.

Jak zainstalować Ansible

Rundeck

Jeszcze raz, dla zdalnego frameworka łatwiejszego w użyciu, ale nie tak potężnego jak Ansible, polecam Rundeck .

Jest to bardzo potężny interfejs graficzny dla wielu użytkowników / logowania, w którym można zautomatyzować większość typowych codziennych zadań, a nawet dać rozwodnione widoki sysopsom lub pracownikom pomocy technicznej.

Podczas uruchamiania poleceń daje także okna z danymi wyjściowymi w podziale na serwer / zadanie.

Może płynnie uruchamiać wiele zadań w tle i umożliwia późniejsze sprawdzenie raportu i danych wyjściowych.

obraz rundeck

Jak zainstalować RunDeck

Pamiętaj, że są osoby uruchamiające Ansible + RunDeck jako interfejs WWW; nie wszystkie przypadki są do tego odpowiednie.

Oczywiste jest również, że korzystanie z Ansible i / lub RunDeck może być interpretowane jako forma lub część dokumentacji infrastruktury, a wraz z upływem czasu pozwala na replikację i ulepszanie działań / przepisów / Poradników.

Wreszcie, mówiąc o centralnym serwerze dowodzenia, stworzę go właśnie do tego zadania. W rzeczywistości terminem technicznym jest skocznia. „Skocznie” poprawiają bezpieczeństwo, jeśli odpowiednio je skonfigurujesz .

Rui F. Ribeiro
źródło
1
Ansible to świetne rozwiązanie w porównaniu do jakiegoś skryptu lub narzędzia, które po prostu transmituje polecenie do wielu serwerów SSH. Ansible to robi (i lepiej nadaje się do tego celu niż Puppet lub Chef), ale daje także możliwość osiągnięcia celu w lepszy sposób, np. Za pomocą wbudowanego modułu, aby zainstalować coś idempotentnie zamiast po prostu wysłać polecenie instalacji i mając nadzieję na najlepsze.
JBentley,
12

Możesz także użyć pssh(lub parallel-ssh), który jest klientem SSH, który łączy się z listą hostów i wykonuje polecenie na wszystkich hostach równolegle:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
morxa
źródło
11

Być może możesz osiągnąć swój cel za pomocą prostej funkcji zsh (bash). Załóżmy, że masz serwery l61 l62 l63 i często musisz na nich uruchomić polecenie:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

Tak więc w wierszu poleceń:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64
Siergiej Kurenkow
źródło
5
Poleciłbym wydrukować nazwę serwerów przed ich wyjściem. Równoległe uruchamianie skryptu powoduje także inne dziwactwa, takie jak fałszowanie danych wyjściowych skryptu - należy podjąć dodatkowe środki, aby zachować aktywność danych wyjściowych. Uruchomienie każdego zadania na pierwszym planie oferuje również minimalną interakcję danych wejściowych.
Rui F Ribeiro
3

Jeśli używasz KDE, oto inna metoda.
- Otwórz okno Konsoli.
Dla każdego serwera, z którym chcesz się komunikować:
- otwórz kartę
- nawiąż połączenie ssh z serwerem
W menu „Edycja” wybierz „skopiuj dane wejściowe” na „wszystkie karty”

Każde polecenie wprowadzone na tej karcie zostanie skopiowane na wszystkie serwery.
Możesz przełączać się z karty na kartę, aby zobaczyć różne wyniki.

Uwaga: moje etykiety menu (w cudzysłowie) mogą być niepoprawne, ponieważ nie używam angielskiej wersji KDE

użytkownik161210
źródło
1

GNU równoległe

Umożliwia proste jedno-liniowe z zapisanymi ustawieniami, dzięki czemu możesz utworzyć profil „prod”, który będzie zawierał listę serwerów i wspólne przełączniki. Następnie wystarczy dodać żądane polecenie i jesteś gotowy. Może także kopiować pliki do serwer i automatycznie usuwa je na końcu, i jest to całkiem wygodne dla jeszcze większych skryptów. Jest także bardzo szybki.

Jedynym problemem jest to, że ma tak wiele opcji;) Ale dokumentacja zawiera również wiele przykładów, więc możesz po prostu na nie spojrzeć na początku.

alkuzad
źródło
2
Cześć, Witamy w systemie Linux i Linux. Ktoś już dał skrypt za pomocą gnu-parallel ma przykład. Radzę się rozejrzeć, docenione zostaną bardziej wyszukane odpowiedzi, które dadzą ci więcej punktów.
Rui F Ribeiro
1
@RuiFRibeiro przepraszam, że nie zauważyłem, SO aplikacja na Androida zawiera błędy w programach i nie widziałem większości treści (generuje puste białe znaki). Wspomniałeś, że gnu-parallel jest głupim wyjściem - może pisać w kolejności, ale musisz to powiedzieć :)
alkuzad
Tak, nie jestem z tym zaznajomiony, ale już tak podejrzewam, dlatego wzmianka o odpowiedzi wymaga poprawy. Dzięki. Nic nie stoi na przeszkodzie, abyś napisał wokół niej lepszą odpowiedź, jednak w przypadku komentowania zalecam komentowanie w tej odpowiedzi.
Rui F Ribeiro,
1

Chcę tu również wspomnieć o „Rex”: https://www.rexify.org/

Jest to niesamowite narzędzie, które wykorzystuje perl + ssh (uwierzytelnianie użytkownika / hasła lub klucza), a ponieważ perl jest zainstalowany na każdym (?!) Systemie Linux, myślę, że wydaje się bardziej naturalny (ma pewne podobieństwa z Ansible & Co.)

możesz uruchamiać polecenia adhoc na wielu serwerach jednocześnie (serwer1, serwer2, serwer ... - po skonfigurowaniu uwierzytelnienia lub alternatywnie użyj parametrów -p / -u i -s / -S do wykonania polecenia sudo):

$ rex -H "server[1..3]" -e 'say run "uptime"'

lub utwórz plik, w którym określisz różne „zadania” i stamtąd je wywołaj

$ rex -f myConfigFile.rex uptime

Można go zainstalować za pomocą repozytoriów lub nawet z perls cpan (lub cpanm Rex), a jego początkowa konfiguracja jest łatwa, patrz:
- https://www.rexify.org/ lub
- https://www.rexify.org/docs/guides/ start_using__r__ex.html i
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

eli
źródło