GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So führen Sie einen einzelnen Befehl auf mehreren Remote-Systemen gleichzeitig aus

Vor einiger Zeit haben wir eine Anleitung zum "Kopieren einer Datei in mehrere Verzeichnisse in der Befehlszeile unter Linux" veröffentlicht . In diesem Artikel haben wir Ihnen verschiedene Methoden beigebracht, um eine einzelne Datei gleichzeitig in mehrere Verzeichnisse zu kopieren. Heute werden wir sehen, wie man einen einzelnen Befehl auf mehreren Remote-Systemen gleichzeitig in Unix-ähnlichen Betriebssystemen ausführt. Wie Sie bereits wissen, können wir über ssh auf das Remote-System zugreifen und mit ihm kommunizieren. openSSH ermöglicht es uns, alle Arten von Verwaltungsaufgaben in einem entfernten System durchzuführen. Eine Einschränkung bei openSSH ist, dass wir den einzelnen Befehl nicht auf mehreren Remote-Systemen gleichzeitig ausführen können. Kein Problem. Hier ist PSSH kommt, um diese Lücke zu füllen.

Herunterladen - Kostenloser Leitfaden:"Der Linux-Kernelmodul-Programmierleitfaden"

PSSH , oder P aralel SSH , ist eine Befehlszeilensuite, mit der Sie auf mehreren Hosts parallel per SSH arbeiten können. Die PSSH-Suite besteht aus den folgenden Befehlen:

  • pssh - SSH zu mehreren Remote-Systemen parallel,
  • pscp - Dateien parallel auf mehrere Hosts kopieren,
  • prsync :Dateien parallel auf mehrere Hosts kopieren,
  • Pnuke :Prozesse parallel auf mehreren Hosts beenden,
  • pslurp :Dateien parallel von mehreren Hosts kopieren.

In diesem Tutorial werden wir sehen, wie man mit PSSH einen einzelnen Befehl auf mehreren Hosts gleichzeitig ausführt.

PSSH installieren

Wir können PSSH ganz einfach mit PIP installieren , ein Python-Paketmanager.

Um PIP auf Arch Linux und seinen Derivaten zu installieren, führen Sie Folgendes aus:

$ sudo pacman -S python-pip

Unter RHEL, Fedora, CentOS:

$ sudo yum install epel-release
$ sudo yum install python-pip

Oder,

$ sudo dnf install epel-release
$ sudo dnf install python-pip

Unter Debian, Ubuntu, Linux Mint:

$ sudo apt-get install python-pip

Weitere Einzelheiten zum Verwalten von Python-Paketen mit PIP finden Sie unter folgendem Link.

  • Wie man Python-Pakete mit Pip verwaltet

Führen Sie nach der Installation von PIP den folgenden Befehl aus, um PSSH zu installieren.

$ sudo pip install pssh

PSSH wurde installiert! Lassen Sie uns weitermachen und sehen, wie man es benutzt.

Einen einzelnen Befehl auf mehreren Remote-Systemen gleichzeitig mit PSSH ausführen

Wichtig: Um PSSH zu verwenden (nur für den Zweck dieses Tutorials), müssen alle Ihre Remote-Systeme einen gemeinsamen Benutzernamen mit demselben Passwort haben . Andernfalls hilft diese Methode nicht. Angenommen, ich habe bereits einen Benutzer namens sk erstellt mit Passwort ostechnix auf allen meinen entfernten Hosts. Sie sollten auch auf allen Ihren Remote-Systemen denselben Benutzer mit demselben Passwort haben.

Lassen Sie uns nun sehen, wie Sie einen einzelnen Befehl auf mehreren Remote-Hosts mit PSSH ausführen. Wechseln Sie zu Ihrem lokalen System, auf dem Sie den Befehl ausführen möchten, und erstellen Sie eine Textdatei mit dem Namen remotehosts.txt . Sie können es benennen, wie Sie möchten.

$ vi remotehosts.txt

Fügen Sie die IP-Adressen Ihrer Remote-Hosts mit Portnummern einzeln hinzu, wie unten genau gezeigt.

192.168.1.103:22
192.168.1.104:22

Wo, 192.168.1.103 und 192.168.1.104 sind die IP-Adressen meiner Remote-Systeme. 22 ist die ssh-Portnummer. Sie müssen die richtige Portnummer angeben, wenn Sie sie bereits geändert haben. Stellen Sie außerdem sicher, dass Sie von Ihrem lokalen System über ssh auf alle entfernten Hosts zugreifen können.

Lassen Sie uns nun die Betriebszeit beider Remote-Hosts von unserem lokalen System aus überprüfen. Führen Sie dazu Folgendes aus:

$ pssh -h remotehosts.txt -l sk -A -i "uptime"

Hier,

  • remotehosts.txt - Enthält die IP-Adressen beider Remote-Systeme.
  • sk - die Benutzernamen beider Remote-Systeme

Geben Sie das Passwort des Benutzers "sk" ein .

Beispielausgabe:

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 20:51:15 [SUCCESS] 192.168.1.103:22
 20:50:50 up 8 min, 1 user, load average: 0.05, 0.11, 0.10
[2] 20:51:15 [SUCCESS] 192.168.1.104:22
 20:50:52 up 12 min, 1 user, load average: 0.00, 0.07, 0.12

Wie Sie oben sehen, haben wir den Befehl "uptime" auf zwei Remote-Hosts ausgeführt und das Ergebnis auf einmal erhalten.

Was ist mit der Kernel-Version? Führen Sie Folgendes aus, um die installierte Version beider Remote-Hosts zu überprüfen:

$ pssh -h remotehosts.txt -l sk -A -i "uname -r"

Beispielausgabe:

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 20:53:09 [SUCCESS] 192.168.1.103:22
3.10.0-327.22.2.el7.x86_64
[2] 20:53:09 [SUCCESS] 192.168.1.104:22
4.4.0-21-generic

Sehr cool, oder? Können wir auf beiden Remote-Hosts gleichzeitig ein Verzeichnis erstellen? Ja, natürlich! Führen Sie dazu den folgenden Befehl aus:

$ pssh -h remotehosts.txt -l sk -A -i "mkdir dir1"

Ebenso können Sie mit PSSH alles tun, was Sie auf mehreren Remote-Hosts von Ihrem lokalen System aus tun möchten.

Wichtig: Bitte seien Sie bei der Verwendung von PSSH sehr vorsichtig. Ein fehlerhafter Befehl wird gleichzeitig auf mehreren Hosts ausgeführt und beschädigt alle Hosts. Seien Sie also sehr vorsichtig, wenn Sie diese Methode in der Produktion anwenden. Ich schlage vor, Sie testen dies in einer virtuellen Maschine. Sobald Sie mit PSSH vertraut sind, können Sie es bei Bedarf in der Produktion verwenden.

Empfohlene Lektüre:

  • DSH – Führen Sie einen Linux-Befehl auf mehreren Hosts gleichzeitig aus
  • Befehle auf Remote-Linux-Systemen über SSH ausführen

Hoffe das hilft.


Linux
  1. So benennen Sie mehrere Dateien gleichzeitig in Linux um

  2. Wie kann ich mehrere Tor-Prozesse gleichzeitig mit unterschiedlichen Exit-IPs ausführen?

  3. Linux:Wie man einen Befehl in einem bestimmten Verzeichnis ausführt

  4. Wie kann ich einen Befehl nach dem Booten ausführen?

  5. Wie führe ich einen Befehl aus, sobald ein ZFS-Scrub *abgeschlossen* ist?

So führen Sie einen Linux-Shell-Befehl / ein Skript im Hintergrund aus

So verwenden Sie den SFTP-Befehl zum Übertragen von Dateien

So führen Sie den Sudo-Befehl ohne Passwort aus

So führen Sie Linux-Befehle im Hintergrund aus

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

So führen Sie mehrere Linux-Befehle gleichzeitig im Linux-Terminal aus