Linux entspricht dem One-to-Many-Remoting von PowerShell

38

Ausgehend von der Windows-Administration möchte ich Linux (Debian) näher kennenlernen. Eine meiner brennenden Fragen, die ich beim Durchsuchen des Webs nicht beantworten konnte (nicht gefunden), lautet: Wie kann ich das sogenannte "Eins-zu-Viele" -Remoting wie in PowerShell für Windows erreichen?

Um es auf das Wesentliche zu reduzieren, würde ich sagen:

Meine Sicht auf Linux:

  • Ich kann in einen Server ssh und meinen Befehl eingeben
  • Ich verstehe das Ergebnis. Für eine Umgebung von 10 Servern müsste ich ein (Perl / Python?) - Skript schreiben, das den Befehl für jeden von ihnen sendet.

Meine Erfahrung mit Windows:

  1. Ich gebe meinen Befehl ein und mit "invoke-command" kann ich diesen an eine Reihe von Servern "senden" (möglicherweise aus einer Textdatei), um ihn gleichzeitig auszuführen und das Ergebnis zurückzugewinnen (als Objekt für die weitere Arbeit).

  2. Ich kann sogar mehrere Sitzungen einrichten, die Verbindung wird im Hintergrund gehalten und Befehle können selektiv an diese Sitzungen gesendet werden.

(Ich habe von Koch, Marionette usw. gehört. Ist das so etwas wie das?)


Update 2019:
Nachdem Sie viel ausprobiert haben - ich empfehle Rex (siehe diesen Kommentar unten ) - einfaches Setup (effektiv benötigt es nur ssh, nichts anderes) und Verwendung (wenn Sie nur ein bisschen Perl kennen, ist es noch besser, aber es ist optional)
mit Rex (ify) ) Sie können das Ad-hoc- Kommando ausführen und es zu einem echten Konfigurationsmanagement weiterentwickeln (... was bedeutet: Es ist in erster Linie ein CM, aber auch für Ad-hoc-Aufgaben geeignet). Die Website ist veraltet, aber aktuell (Stand: 01/2019). es befindet sich in aktiver Entwicklung und der IRC-Channel ist ebenfalls aktiv.

Mit dem neuen openssh von Windows gibt es noch mehr Möglichkeiten

Du kannst es versuchen: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

eli
quelle
parallel ssh kann es tun: serverfault.com/questions/2533/…
Rogerdpack
MobaXTerm unterstützt "Multi-Execution" in vielen ssh-Sessions: mobaxterm.mobatek.net/features.html (scrollen Sie nach unten). Auch wenn Ihre primäre Arbeitsstationsumgebung Windows ist, ist es auch ein hübsches Tool zum Verbinden mit Linux-Boxen und vielem mehr.
Kev
mit tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Antworten:

50

Zusammenfassung

  • Ansible ist ein DevOps-Tool, das PowerShell stark ersetzt
  • RunDeck als grafische Oberfläche ist praktisch
  • Einige Leute führen RunDeck + Ansible zusammen aus

Clustersh

Zum Senden von Remote-Befehlen an mehrere Server würde ich für Anfänger Clustersh empfehlen

So installieren Sie clustersshin Debian:

apt-get install clusterssh

Ein weiteres Cluster-Tutorial :

ClusterSSH ist ein Tk / Perl-Wrapper für Standard-Linux-Tools wie XTerm und SSH. Als solches läuft es auf nahezu jedem POSIX-kompatiblen Betriebssystem, auf dem die Bibliotheken existieren - ich habe es unter Linux, Solaris und Mac OS X ausgeführt. Es benötigt die Perl-Bibliotheken Tk (perl-tk unter Debian oder Ubuntu). und X11 :: Protocol (libx11-protocol-perl unter Debian oder Ubuntu), zusätzlich zu xterm und OpenSSH.

Ansible

Als Remote-Framework für die Verwaltung mehrerer Systeme ist Ansible eine sehr interessante Alternative zu Puppet. Es ist schlanker und benötigt keine dedizierten Remote-Agenten, da es über SSH funktioniert (es wurde auch von RedHat gekauft).

Die Playbooks sind umfangreicher als die Befehlszeilenoptionen.

Um Ansible zu verwenden, müssen Sie jedoch eine einfache Installation durchführen und die Textdatei für die Client-Liste einrichten.

Danach ist es so einfach, einen Befehl auf allen Servern auszuführen:

ansible all -m command -a "uptime"

Die Ausgabe ist außerdem sehr gut formatiert und nach Regeln / Servern getrennt. Während der Ausführung im Hintergrund kann die Ausgabe in eine Datei umgeleitet und später abgerufen werden.

Sie können mit einfachen Regeln beginnen, und die Verwendung von Ansible wird interessanter, wenn Sie unter Linux wachsen und Ihre Infrastruktur größer wird. Als solches wird es so viel mehr tun als PowerShell.

Als Beispiel ein sehr einfaches Playbook zum Upgrade von Linux-Servern, das ich geschrieben habe:

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

Es sind auch viele Module definiert, mit denen Sie einfach umfassende Richtlinien erstellen können.

Modulverzeichnis - Ansible Dokumentation

Es hat auch ein interessantes offizielles Hub / "soziales" Netzwerk von Repositories, um nach bereits gesetzten Ansible Policies der Community zu suchen. Ansible Galaxy

Ansible ist auch weit verbreitet, und Sie werden viele Projekte in Github finden, wie dieses von mir für das FreeRadius-Setup .

Ansible ist ein kostenloses Open-Source-Framework, hat aber auch eine kostenpflichtige Web-Panel-Oberfläche, Ansible Tower, obwohl die Lizenzierung ziemlich teuer ist.

Heute, nachdem RedHat es gekauft hat, hat Tower auch die Open-Source-Version AWX .

Als Bonus ist Ansible auch in der Lage, Windows-Server zu verwalten, obwohl ich es nie dafür verwendet habe.

Es ist auch in der Lage, Netzwerkgeräte (Router, Switches und Firewalls) zu verwalten, was es zu einer sehr interessanten Lösung als schlüsselfertige Automatisierungslösung macht.

Wie installiere ich Ansible?

Rundeck

Wiederum empfehle ich Rundeck , um ein Remote-Framework zu verwenden, das einfacher ist, aber nicht so leistungsfähig wie Ansible .

Es ist eine sehr leistungsstarke grafische Benutzeroberfläche für mehrere Benutzer / Anmeldungen, mit der Sie einen Großteil Ihrer alltäglichen Aufgaben automatisieren und Sysops oder Helpdesk-Mitarbeitern verwässerte Ansichten geben können.

Wenn Sie die Befehle ausführen, erhalten Sie auch Fenster mit einer nach Server / Task aufgeschlüsselten Ausgabe.

Es kann mehrere Jobs im Hintergrund nahtlos ausführen und Sie können den Bericht und die Ausgabe später anzeigen.

Rundeck-Bild

So installieren Sie RunDeck

Bitte beachten Sie, dass es Leute gibt, die Ansible + RunDeck als Webinterface ausführen. Nicht alle Fälle sind dafür geeignet.

Es versteht sich auch von selbst, dass die Verwendung von Ansible und / oder RunDeck als Form oder Teil der Infrastrukturdokumentation ausgelegt werden kann und im Laufe der Zeit die Replikation und Verbesserung der Aktionen / Rezepte / Playbooks ermöglicht.

Als letztes würde ich, wenn ich von einem zentralen Befehlsserver spreche, einen erstellen, der nur für die Aufgabe geeignet ist. Eigentlich ist der Fachbegriff eine Sprungbox. "Sprungkästen" verbessern die Sicherheit, wenn Sie sie richtig einrichten .

Rui F Ribeiro
quelle
1
Ansible ist eine großartige Lösung im Vergleich zu einem Skript oder Dienstprogramm, das lediglich einen Befehl an mehrere SSH-Server sendet. Ansible macht das (und ist für diesen Zweck besser geeignet als Puppet oder Chef), bietet Ihnen aber auch die Möglichkeit, Ihr Ziel auf eine bessere Art und Weise zu erreichen, z und auf das Beste hoffen.
JBentley
12

Sie können auch pssh(oder parallel-ssh) verwenden, einen SSH-Client, der eine Verbindung zu einer Liste von Hosts herstellt und den Befehl auf allen Hosts parallel ausführt:

$ 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
quelle
11

Vielleicht können Sie Ihr Ziel mit einer einfachen zsh (bash) -Funktion erreichen. Angenommen, Sie haben Server l61 l62 l63 und müssen häufig einen Befehl auf ihnen ausführen:

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

Also, in der Kommandozeile:

$ 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
Sergei Kurenkov
quelle
5
Ich würde empfehlen, den Namen der Server vor der Ausgabe auszudrucken. Das parallele Ausführen des Skripts bringt auch andere Macken mit sich, z. B. das Fummeln der Ausgabe des Skripts. Es müssen zusätzliche Maßnahmen ergriffen werden, um die Aktivität der Ausgabe zu erhalten. Das Ausführen jeder Aufgabe im Vordergrund bietet auch die Möglichkeit einer minimalen Eingabeinteraktion.
Rui F Ribeiro
3

Wenn Sie KDE verwenden, finden Sie hier eine andere Methode.
- Öffnen Sie ein Konsole-Fenster.
Für jeden Server, mit dem Sie kommunizieren möchten:
- Öffnen Sie eine Registerkarte
- Herstellen einer SSH-Verbindung mit dem Server
Wählen Sie im Menü "Bearbeiten" die Option "Eingabe kopieren" zu "Alle Registerkarten".

Jeder Befehl, den Sie auf dieser Registerkarte eingeben, wird auf alle Server kopiert.
Sie können von Registerkarte zu Registerkarte wechseln, um die verschiedenen Ergebnisse anzuzeigen.

Hinweis: Meine Menübeschriftungen (in Anführungszeichen) sind möglicherweise falsch, da ich keine englische Version von KDE verwende

user161210
quelle
1

GNU parallel

Es erlaubt einfache Einzeiler mit gespeicherten Einstellungen, so dass Sie ein Profil "prod" erstellen können, das eine Serverliste und allgemeine Schalter enthält. Fügen Sie dann einfach den gewünschten Befehl hinzu und Sie sind bereit. Sie können auch Dateien kopieren den Server und löscht sie automatisch am Ende, und es ist ziemlich praktisch für noch größere Skripte. Auch es ist sehr schnell.

Das einzige Problem ist, dass es so viele Optionen gibt;) Die Dokumentation enthält jedoch auch viele Beispiele, sodass Sie sie am Anfang nur ansehen können.

alkuzad
quelle
2
Hallo, Willkommen bei Linux und Linux. Jemand, der bereits ein Skript mit gnu-parallel erstellt hat, hat ein Beispiel. Ich rate Ihnen, sich umzusehen, ausführlichere Antworten sind willkommen und werden Ihnen mehr Punkte geben.
Rui F Ribeiro
1
@RuiFRibeiro sorry ich habe nicht bemerkt, SO Android App Fehler mit Codeboxen und ich konnte den größten Teil des Inhalts nicht sehen (es erzeugt leere Leerzeichen). Sie erwähnten, dass gnu-parallel die Ausgabe fummelt - es kann sie der Reihe nach schreiben, aber Sie müssen es dazu auffordern :)
alkuzad
Ja, ich kenne mich damit nicht aus, habe aber den Verdacht, dass die Antwort verbessert werden muss. Vielen Dank. Nichts hindert Sie daran, eine bessere Antwort zu schreiben. Zum Kommentieren empfehle ich jedoch, diese Antwort zu kommentieren.
Rui F Ribeiro
1

Ich möchte "Rex" auch hier erwähnen: https://www.rexify.org/

Es ist ein großartiges Tool, das Perl + ssh (Benutzer- / Passwort- oder Schlüsselauthentifizierung) verwendet. Da Perl auf jedem (?!) Linux-System installiert ist, scheint es natürlicher zu sein (es hat einige Ähnlichkeiten mit Ansible & Co.).

Sie können Ad-hoc-Befehle auf mehreren Servern gleichzeitig ausführen (Server1, Server2, Server ... - nach dem Einrichten der Authentifizierung oder alternativ die Parameter -p / -u und -s / -S für die Sudo-Ausführung des Befehls verwenden):

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

oder erstellen Sie eine Datei, in der Sie verschiedene "Aufgaben" angeben und von dort aus aufrufen

$ rex -f myConfigFile.rex uptime

Es kann über Repositorys oder sogar mit perls cpan (oder cpanm Rex) installiert werden und die Ersteinrichtung ist einfach, siehe:
- https://www.rexify.org/ oder
- https://www.rexify.org/docs/guides/ start_using__r__ex.html und
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

eli
quelle