pssh ist eine in Python implementierte Open-Source-Software, die für Batch-SSH-Operationen auf einer großen Anzahl von Maschinen verwendet wird. pssh ist ein Tool, das Befehle auf mehreren Servern ausführen kann und auch das Kopieren von Dateien unterstützt, was es zu einem hervorragenden Tool seiner Art macht. Ich empfehle die Verwendung von pssh gegenüber dem For-Loop-Ansatz! Voraussetzung für die Verwendung von pssh ist, dass auf dem lokalen Computer und anderen Servern ein Schlüsselauthentifizierungszugriff (also eine SSH-Vertrauensbeziehung) konfiguriert werden muss. Nachfolgend sehen Sie eine Aufzeichnung der Batch-Operationen mit pssh: 1) Installieren Sie pssh Sie können es direkt über yum installieren:
[root@bastion-IDC ~]# yum install -y pssh
2) Verwendung von pssh
[root@bastion-IDC ~]# pssh --help
-h Remote-Host-Listendatei zum Ausführen von Befehlen -H Benutzer@IP:Port Dateiinhaltsformat [Benutzer@]Host[:Port] -l Benutzername des Remote-Rechners -p Die maximale Anzahl gleichzeitig zulässiger Verbindungen -o Ausgabe in eine Datei umleiten -e Ausführungsfehler in eine Datei umleiten -t legt das Timeout für die Befehlsausführung fest -A fordert ein Passwort an und übergibt es an ssh (beachten Sie, dass dieser Parameter nach dem Hinzufügen nur eine Eingabeaufforderung ist. Sie können ihn beiläufig eingeben oder die Eingabetaste drücken, ohne ihn einzugeben). -O Legen Sie die spezifische Konfiguration der SSH-Parameter fest (siehe Konfigurationsdatei ssh_config). -x übergibt mehrere SSH-Befehle, mehrere Befehle werden durch Leerzeichen getrennt und in Anführungszeichen gesetzt -X Wie -x, aber es kann immer nur ein Befehl gleichzeitig übergeben werden. -i Zeigt die Standardausgabe und den Standardfehler an, nachdem jeder Host ausgeführt wurde -I Liest jeden Eingabebefehl und übergibt ihn an den SSH-Prozess, sodass Befehlsskripte an die Standardeingabe weitergeleitet werden können.
3) Beschreibung der PSSH-Instanz
[root@bastion-IDC ~]# cat hosts.txt //Das Informationsformat in der Listendatei ist „ip:port“. Wenn der vom lokalen Computer und dem Remotecomputer verwendete SSH-Port derselbe ist, können Sie den Port weglassen und die IP direkt verwenden. Es wird jedoch empfohlen, alle Ports mitzubringen. 192.168.1.101:22 192.168.1.109:22 192.168.1.118:25791 192.168.1.105:25791 Wie oben gezeigt, werden die vier Maschinen in einer Listendatei hosts.txt platziert. Die lokale Maschine hat eine Vertrauensbeziehung mit diesen vier Maschinen für die passwortlose SSH-Anmeldung hergestellt. Hinweis: Die Maschinen in der Listendatei müssen im Voraus eine SSH-Vertrauensbeziehung mit der lokalen Maschine hergestellt haben. Wenn nicht, wird pssh bei der Stapelausführung nicht ausgeführt, wenn die Maschine an der Reihe ist, die keine Vertrauensbeziehung hergestellt hat. a) Batch-Ausführung von Befehlen
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i 'uptime' [1] 16:05:48 [ERFOLG] 192.168.1.105 03:03:25, 79 Tage, 13:44, 0 Benutzer, durchschnittliche Auslastung: 0,04, 0,01, 0,00 [2] 16:05:48 [ERFOLG] 192.168.1.118 03:03:32, 75 Tage aktiv, 15:27, 4 Benutzer, durchschnittliche Auslastung: 0,96, 0,74, 0,45 Stderr: Adresse 192.168.1.118 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH! [3] 16:05:48 [ERFOLG] 192.168.1.109 03:03:25, 61 Tage, 21:56, 2 Benutzer, durchschnittliche Auslastung: 0,02, 0,06, 0,18 Stderr: Adresse 192.168.1.102 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH! [4] 16:05:48 [ERFOLG] 192.168.1.101 16:03:17, 35 Tage aktiv, 23:45, 1 Benutzer, durchschnittliche Auslastung: 0,03, 0,04, 0,01 Stderr: Adresse 192.168.1.101 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH!
Wenn Sie den Parameter -A hinzufügen, werden Sie trotzdem zur Eingabe eines Passworts aufgefordert, auch wenn Sie zuvor eine SSH-Vertrauensbeziehung eingerichtet haben!
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -A 'uptime' Achtung: Geben Sie Ihr Passwort nicht ein, wenn jemand anderes Superuser ist Berechtigungen oder Zugriff auf Ihr Konto. Passwort: //Beachten Sie, dass dieser Parameter nach dem Hinzufügen nur als Erinnerung dient. Sie können hier alles eingeben oder einfach die Eingabetaste drücken, ohne etwas einzugeben. [1] 16:08:25 [ERFOLG] 192.168.1.105 03:06:03, 79 Tage, 13:46, 0 Benutzer, durchschnittliche Auslastung: 0,00, 0,00, 0,00 [2] 16:08:25 [ERFOLG] 192.168.1.109 03:06:03, 61 Tage, 21:59, 2 Benutzer, durchschnittliche Auslastung: 0,00, 0,04, 0,15 Stderr: Adresse 192.168.1.102 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH! [3] 16:08:25 [ERFOLG] 192.168.1.101 16:05:54, 35 Tage, 23:47, 1 Benutzer, durchschnittliche Auslastung: 0,00, 0,02, 0,00 Stderr: Adresse 192.168.1.101 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH! [4] 16:08:25 [ERFOLG] 192.168.1.118 03:06:10, 75 Tage aktiv, 15:29, 4 Benutzer, durchschnittliche Auslastung: 0,85, 0,78, 0,51 Stderr: Adresse 192.168.1.118 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH! [root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -t 10 -o /root/pssh.log 'Betriebszeit && Datum' [1] 17:01:02 [ERFOLG] 192.168.1.109 03:58:33, 79 Tage, 5:58, 1 Benutzer, durchschnittliche Auslastung: 0,00, 0,00, 0,00 Mittwoch, 8. Februar 2017, 03:58:33 EST [2] 17:01:02 [ERFOLG] 192.168.1.105 03:58:40, 79 Tage, 14:39, 1 Benutzer, durchschnittliche Auslastung: 0,00, 0,00, 0,00 Mittwoch, 8. Februar 2017, 03:58:40 EST [3] 17:01:02 [ERFOLG] 192.168.1.101 16:58:31, 36 Tage, 40 Minuten, 1 Benutzer, durchschnittliche Auslastung: 0,10, 0,03, 0,01 Mittwoch, 8. Februar 2017, 16:58:31 CST Stderr: Adresse 192.168.1.101 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH! [4] 17:01:02 [ERFOLG] 192.168.1.118 03:58:47, 75 Tage aktiv, 16:22, 3 Benutzer, durchschnittliche Auslastung: 0,20, 0,21, 0,31 Mittwoch, 8. Februar 2017, 03:58:47 EST Stderr: Adresse 192.168.1.118 wird auf localhost abgebildet, dies führt jedoch nicht zurück zur Adresse – MÖGLICHER EINBRUCHVERSUCH! [root@bastion-IDC ~]# ll /root/pssh.log/ insgesamt 16 -rw-r--r--. 1 root root 100 8. Feb 17:01 192.168.1.101 -rw-r--r--. 1 root root 99 8. Feb 17:01 192.168.1.105 -rw-r--r--. 1 root root 99 8. Feb 17:01 192.168.1.109 -rw-r--r--. 1 root root 100 8. Feb 17:01 192.168.1.118
b) Stapel-Upload von Dateien oder Verzeichnissen (Befehl pscp.pssh) Batch-Upload lokaler Dateien /mnt/test.file in das Verzeichnis /tmp auf dem Remote-Server:
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt /mnt/test.file /tmp/ [1] 16:18:05 [ERFOLG] 192.168.1.105 [2] 16:18:05 [ERFOLG] 192.168.1.109 [3] 16:18:05 [ERFOLG] 192.168.1.101 [4] 16:18:05 [ERFOLG] 192.168.1.118
Batch-Upload der lokalen Dateien /mnt/test.file, /mnt/aa.file, /mnt/bb.file in das Verzeichnis /tmp auf dem Remote-Server:
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt /mnt/test.file /mnt/aa.file /mnt/bb.file /tmp/ [1] 16:22:50 [ERFOLG] 192.168.1.109 [2] 16:22:50 [ERFOLG] 192.168.1.105 [3] 16:22:50 [ERFOLG] 192.168.1.118 [4] 16:22:50 [ERFOLG] 192.168.1.101
oder:
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt /mnt/{test.file,aa.file,bb.file} /tmp/ [1] 16:23:44 [ERFOLG] 192.168.1.109 [2] 16:23:44 [ERFOLG] 192.168.1.105 [3] 16:23:44 [ERFOLG] 192.168.1.101 [4] 16:23:44 [ERFOLG] 192.168.1.118
Führen Sie einen Batch-Upload des lokalen Verzeichnisses /mnt/zhong in das Verzeichnis /tmp auf dem Remote-Server durch (beim Hochladen des Verzeichnisses muss der Parameter -r hinzugefügt werden):
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt -r /mnt/zhong /tmp/ [1] 16:19:36 [ERFOLG] 192.168.1.109 [2] 16:19:36 [ERFOLG] 192.168.1.105 [3] 16:19:36 [ERFOLG] 192.168.1.101 [4] 16:19:36 [ERFOLG] 192.168.1.118
Stapelhochladen der lokalen Verzeichnisse /mnt/zhong, /mnt/aa, /mnt/vv in das Verzeichnis /tmp auf dem Remote-Server
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt -r /mnt/zhong /mnt/aa /mnt/vv /tmp/ [1] 16:21:02 [ERFOLG] 192.168.1.105 [2] 16:21:02 [ERFOLG] 192.168.1.109 [3] 16:21:02 [ERFOLG] 192.168.1.101 [4] 16:21:02 [ERFOLG] 192.168.1.118
oder:
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt -r /mnt/{zhong,aa,vv} /tmp/ [1] 16:22:00 [ERFOLG] 192.168.1.109 [2] 16:22:00 [ERFOLG] 192.168.1.105 [3] 16:22:00 [ERFOLG] 192.168.1.101 [4] 16:22:00 [ERFOLG] 192.168.1.118
c) Batch-Download von Dateien oder Verzeichnissen (Befehl pslurp) Laden Sie bestimmte Dateien stapelweise vom Server auf den lokalen Computer herunter. Sie müssen sich keine Sorgen über doppelte Namen machen, da pssh ein Verzeichnis erstellt hat, das nach der IP-Adresse in der Dateiliste benannt ist, um die heruntergeladenen Dateien zu speichern:
[root@bastion-IDC ~]# pslurp -l root -h hosts.txt /etc/hosts . [1] 16:32:01 [ERFOLG] 192.168.1.109 [2] 16:32:01 [ERFOLG] 192.168.1.105 [3] 16:32:01 [ERFOLG] 192.168.1.101 [4] 16:32:01 [ERFOLG] 192.168.1.118 [root@bastion-IDC ~]# ll insgesamt 123 drwxr-xr-x. 2 root root 4096 8. Feb 16:32 192.168.1.101 drwxr-xr-x. 2 root root 4096 8. Feb 16:32 192.168.1.105 drwxr-xr-x. 2 root root 4096 8. Feb 16:32 192.168.1.109 drwxr-xr-x. 2 root root 4096 8. Feb 16:32 192.168.1.118 [root@bastion-IDC ~]# ll 192.168.1.101 insgesamt 4 -rw-r--r--. 1 root root 224 8. Feb 16:32 Gastgeber [root@bastion-IDC ~]# ll 192.168.1.109 insgesamt 4 -rw-r--r--. 1 root root 252 8. Feb 16:32 Gastgeber [root@bastion-IDC ~]# ll 192.168.1.105 insgesamt 4 -rw-r--r--. 1 root root 252 8. Feb 16:32 Gastgeber [root@bastion-IDC ~]# ll 192.168.1.118 insgesamt 4 -rw-r--r--. 1 root root 212 8. Feb 16:32 Gastgeber
Achten Sie außerdem besonders auf: Der obige Batch-Downloadvorgang kann nur in das lokale aktuelle Verzeichnis heruntergeladen werden. Im Befehl kann ihm kein angegebener Pfad folgen:
[root@bastion-IDC ~]# pslurp -l root -h hosts.txt /etc/hosts /mnt/ [1] 16:34:14 [FAILURE] 192.168.1.109 Beendet mit Fehlercode 1 [2] 16:34:14 [FAILURE] 192.168.1.105 Beendet mit Fehlercode 1 [3] 16:34:14 [FAILURE] 192.168.1.101 Beendet mit Fehlercode 1 [4] 16:34:14 [FAILURE] 192.168.1.118 Beendet mit Fehlercode 1
Wenn Sie in das lokale /mnt-Verzeichnis herunterladen möchten, wechseln Sie zuerst in das /mnt-Verzeichnis und führen Sie dann den Download-Befehl aus: (die Listendatei muss dem vollständigen Pfad entsprechen)
[root@bastion-IDC ~]# cd /mnt/ [root@bastion-IDC mnt]# pslurp -l root -h /root/hosts.txt /etc/hosts ./ [1] 16:34:34 [ERFOLG] 192.168.1.109 [2] 16:34:34 [ERFOLG] 192.168.1.105 [3] 16:34:34 [ERFOLG] 192.168.1.118 [4] 16:34:34 [ERFOLG] 192.168.1.101 [root@bastion-IDC mnt]# ll insgesamt 16 drwxr-xr-x. 2 root root 4096 8. Feb 16:34 192.168.1.101 drwxr-xr-x. 2 root root 4096 8. Feb 16:34 192.168.1.105 drwxr-xr-x. 2 root root 4096 8. Feb 16:34 192.168.1.109 drwxr-xr-x. 2 root root 4096 8. Feb 16:34 192.168.1.118
Das Obige ist für das Batch-Downloaden von Dateien. Wenn Sie Verzeichnisse stapelweise herunterladen möchten, müssen Sie nur einen -r-Parameter hinzufügen!
[root@bastion-IDC mnt]# pslurp -l root -h /root/hosts.txt -r /home/ ./ [1] 16:39:05 [ERFOLG] 192.168.1.109 [2] 16:39:05 [ERFOLG] 192.168.1.105 [3] 16:39:05 [ERFOLG] 192.168.1.101 [4] 16:39:05 [ERFOLG] 192.168.1.118 [root@bastion-IDC mnt]# ll 192.168.1.101 insgesamt 8 drwxr-xr-x. 6 root root 4096 8. Feb 16:39 Startseite -rw-r--r--. 1 root root 224 8. Feb 16:38 Gastgeber [root@bastion-IDC mnt]# ll 192.168.1.* 192.168.1.101: insgesamt 8 drwxr-xr-x. 6 root root 4096 8. Feb 16:39 Startseite -rw-r--r--. 1 root root 224 8. Feb 16:38 Gastgeber 192.168.1.105: insgesamt 8 drwxr-xr-x. 4 root root 4096 8. Feb 16:39 Startseite -rw-r--r--. 1 root root 252 8. Feb 16:38 Gastgeber 192.168.1.109: insgesamt 8 drwxr-xr-x. 4 root root 4096 8. Feb 16:39 Startseite -rw-r--r--. 1 root root 252 8. Feb 16:38 Gastgeber 192.168.1.118: insgesamt 8 drwxr-xr-x. 3 root root 4096 8. Feb 16:39 Startseite -rw-r--r--. 1 root root 212 8. Feb 16:38 Gastgeber
d) Batch-Synchronisierung (Befehl prsync) Synchronisieren Sie die Dateien oder Verzeichnisse im lokalen Verzeichnis /mnt/test mit dem Pfad /mnt/test des Remotecomputers.
[root@bastion-IDC ~]# prsync -l root -h hosts.txt -r /mnt/test/ /mnt/test/ [1] 16:46:41 [ERFOLG] 192.168.1.109 [2] 16:46:41 [ERFOLG] 192.168.1.105 [3] 16:46:41 [ERFOLG] 192.168.1.118 [4] 16:46:41 [ERFOLG] 192.168.1.101
Synchronisieren Sie die Dateien oder Verzeichnisse im lokalen Verzeichnis /mnt/test mit dem /mnt-Pfad des Remote-Computers
[root@bastion-IDC ~]# prsync -l root -h hosts.txt -r /mnt/test/ /mnt/ [1] 16:47:40 [ERFOLG] 192.168.1.109 [2] 16:47:40 [ERFOLG] 192.168.1.105 [3] 16:47:45 [ERFOLG] 192.168.1.101 [4] 16:47:46 [ERFOLG] 192.168.1.118
Beachten: Der obige Batch-Synchronisierungsvorgang für Verzeichnisse dient zum Synchronisieren der entsprechenden Verzeichnisdaten des lokalen Computers mit dem Remotecomputer. Die redundanten Dateien im Verzeichnis auf dem Remotecomputer bleiben ebenfalls erhalten (die redundanten Dateien werden nicht gelöscht). Entfernen Sie entsprechend bei Dateisynchronisierungsvorgängen im Stapelbetrieb den Parameter -r. Hinweis: Beim Synchronisieren von Dateien handelt es sich tatsächlich um ein vollständiges Überschreiben, und alle Dateien in den entsprechenden Dateien auf dem Remotecomputer werden ersetzt! wie folgt: Synchronisieren Sie den Inhalt der lokalen Datei /mnt/test/file mit der Datei /mnt/test/file auf dem Remote-Server.
[root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/datei /mnt/test/datei [1] 16:53:54 [ERFOLG] 192.168.1.109 [2] 16:53:54 [ERFOLG] 192.168.1.105 [3] 16:53:54 [ERFOLG] 192.168.1.101 [4] 16:53:54 [ERFOLG] 192.168.1.118 [root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/file /mnt/aaa [1] 16:54:03 [ERFOLG] 192.168.1.109 [2] 16:54:03 [ERFOLG] 192.168.1.105 [3] 16:54:03 [ERFOLG] 192.168.1.101 [4] 16:54:04 [ERFOLG] 192.168.1.118
e) Batch-Kill-Prozesse auf Remote-Rechnern (pnuke-Befehl) Beispielsweise können Sie Nginx-Prozesse auf Remote-Rechnern stapelweise beenden.
[root@bastion-IDC ~]# pnuke -h hosts.txt -l root nginx [1] 17:09:14 [ERFOLG] 192.168.1.109 [2] 17:09:14 [ERFOLG] 192.168.1.105 [3] 17:09:15 [ERFOLG] 192.168.1.118 [4] 17:09:15 [ERFOLG] 192.168.1.101
Das könnte Sie auch interessieren:- SSH-Alias-Einstellungen für den Zugriff auf Remote-Server
- Verwenden von WinSCP und Stapelverarbeitung unter Windows zum Hochladen von Dateien auf einen Linux-Server über den SSH-Port
- Das Paramiko-Modul unter Python implementiert eine SSH-Verbindung zur Anmeldung beim Linux-Server
- So laden Sie Dateien und Ordner über SSH auf einen Linux-Server hoch
- Installieren Sie OpenSSH unter Windows und melden Sie sich beim Linux-Server an, indem Sie einen SSH-Schlüssel generieren.
- Vier Tipps zum Konfigurieren eines sicheren SSH-Zugriffs auf Linux-Servern
- Sicherere Einstellung für Linux-VPS und -Server: Putty SSH, Verwendung eines Schlüssel-Logins
- Methode zur Verhinderung von SSH-Cracking auf Linux-Servern (empfohlen)
- Zwei Möglichkeiten zum Erstellen von SSH-Server-Aliasen in Linux
|