So verwenden Sie die Shell, um Batchvorgänge auf mehreren Servern auszuführen

So verwenden Sie die Shell, um Batchvorgänge auf mehreren Servern auszuführen

SSH-Protokoll

Bevor wir über die Anmeldung mit öffentlichem Schlüssel sprechen, sprechen wir über das SSH-Protokoll.

SSH ist ein Netzwerkprotokoll. Wenn wir ssh sagen, meinen wir normalerweise seine Implementierung, nämlich OpenSSH. In der Shell ist es der ssh-Befehl.

SSH

Secure Shell (SSH) ist ein verschlüsseltes Netzwerkübertragungsprotokoll, das eine sichere Übertragungsumgebung für Netzwerkdienste in einem unsicheren Netzwerk bereitstellen kann. SSH erstellt einen sicheren Tunnel im Netzwerk, um den SSH-Client und den Server zu verbinden.

Das Prinzip von SSH ähnelt dem von HTTPS. Beide sind Anwendungsschichtprotokolle, die auf TCP und asymmetrischer Verschlüsselung basieren. Der Unterschied zu HTTPS besteht darin, dass HTTPS digitale Zertifikate und digitale Zertifikatauthentifizierungszentren verwendet, um Man-in-the-Middle-Angriffe zu verhindern, während der öffentliche Schlüssel des SSH-Servers nicht notariell beglaubigt ist und seine Identität nur manuell über seinen öffentlichen Schlüssel-Fingerabdruck ermittelt werden kann.

Wie in der folgenden Abbildung gezeigt, werden wir bei der ersten Anmeldung per SSH bei einem Server von SSH aufgefordert, den Fingerabdruck des öffentlichen Schlüssels des Servers zu überprüfen.

Wenn wir überprüfen, dass dieser öffentliche Schlüsselfingerabdruck der Server ist, bei dem wir uns anmelden möchten, wird der öffentliche Schlüssel des Servers zu ~/.ssh/known_hosts hinzugefügt. Bei der erneuten Anmeldung überspringt ssh die Phase der Überprüfung des öffentlichen Schlüssels, nachdem festgestellt wurde, dass es sich um einen authentifizierten Server handelt.

Verbindungsprozess

Das Konzept der Kommunikationsverschlüsselung habe ich auch in meinem vorherigen Artikel vorgestellt, siehe: Lassen Sie uns noch einmal über Verschlüsselung sprechen – die asymmetrische RSA-Verschlüsselung verstehen und verwenden. Informationen zum Verbindungsprozess des SSH-Protokolls finden Sie unter: Protokollgrundlagen: Secure Shell-Protokoll.

Zusammenfassend sind im Wesentlichen die folgenden Schritte enthalten:

  • TCP-Drei-Wege-Handshake
  • Aushandlung der SSH-Protokollversion
  • Öffentlicher Schlüsselaustausch zwischen Client und Server
  • Aushandlung des Verschlüsselungsalgorithmus
  • Der Client verwendet eine symmetrische Verschlüsselungsschlüsselauthentifizierung
  • Sichere Kommunikation zwischen Client und Server

Ich habe tcpdump + wireshark verwendet, um Pakete zu erfassen und den SSH-Verbindungsprozess zu überprüfen, wie in der folgenden Abbildung gezeigt:

Ich muss erneut seufzen, dass tcpdump + Wireshark ein echtes Tool zum Erlernen von Netzwerkprotokollen ist.

SSH-Werkzeug

ssh

Als Tool ist ssh in Server und Client unterteilt. Auf der Serverseite ist es sshd, das im Allgemeinen Port 22 belegt. Wir verwenden normalerweise den Client. Die allgemeine Verwendung lautet „ssh user@host“. Anschließend geben wir gemäß der SSH-Eingabeaufforderung das Kennwort ein und melden uns beim Server an.

Seine Funktionen sind sehr leistungsstark, wie Sie an den unterstützten Parametern erkennen können.

ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b Bind-Adresse] [-c Verschlüsselungsspezifikation] [-D [Bind-Adresse:]Port] [-E Protokolldatei] [-e Escape-Zeichen] [-F Konfigurationsdatei] [-I pkcs11] [-i Identitätsdatei] [-J [Benutzer@]Host[:Port]] [-L Adresse] [-l Anmeldename] [-m Mac-Spezifikation] [-O Befehlszeile] [-o Option] [-p Port] [-Q Abfrageoption] [-R Adresse] [-S Befehlspfad] [-W Host:Port] [-w lokaler_Tun[:Remote-Tun]] [Benutzer@]Hostname [Befehl]

Nachdem wir das SSH-Protokoll und den SSH-Befehl vorgestellt haben, sprechen wir abschließend über die Anmeldung mit öffentlichem Schlüssel.

Anmeldung mit öffentlichem Schlüssel

Sobald Sie die Prinzipien der asymmetrischen Verschlüsselung verstanden haben, ist die Anmeldung mit einem öffentlichen Schlüssel sehr einfach. Da der öffentliche und der private Schlüssel ein eindeutiges Paar sind, kann der Server die Authentizität des Clients vollständig über den öffentlichen Schlüssel feststellen, solange der Client die Sicherheit seines eigenen privaten Schlüssels gewährleistet. Um die Anmeldung mit öffentlichem Schlüssel zu implementieren, müssen wir daher zunächst ein öffentliches und ein privates Schlüsselpaar generieren.

Generieren Sie ein Schlüsselpaar mit dem Befehl ssh-keygen. Um die Schritte vollständiger zu machen, speichere ich sie vorübergehend im Arbeitsverzeichnis. Standardmäßig werden sie im Verzeichnis ~/.ssh gespeichert.

~ ssh-keygen

Generieren eines öffentlichen/privaten RSA-Schlüsselpaars.

Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/Users/zbs/.ssh/id_rsa): ./test

Passphrase eingeben (leer, wenn keine Passphrase vorhanden ist):

Geben Sie dieselbe Passphrase erneut ein:

Ihre Identifikation wurde in ./test gespeichert.

Ihr öffentlicher Schlüssel wurde in ./test.pub gespeichert.

Der Schlüsselfingerabdruck ist:

SHA256:xxxxx/B17z/xxxxxx [email protected]

Das Randomart-Bild des Schlüssels ist:

+---[RSA 2048]----+

| o+*..EO* |

| .... |

|oo+ .o++.o|

+----[SHA256]-----+

~ ls ./test*

./test ./test.pub

Fügen Sie den Inhalt der privaten Schlüsseldatei ./test in die Datei ~/.ssh/id_rsa des Clients ein, versuchen Sie dann, sich mit dem Kennwort beim Server anzumelden, und fügen Sie den Inhalt der öffentlichen Schlüsseldatei ./test.pub in die Datei ~/.ssh/authorized_keys des Servers ein.

Bei der nächsten Anmeldung verwendet ssh automatisch Ihren eigenen privaten Schlüssel zur Authentifizierung, sodass die Eingabe eines Kennworts nicht erforderlich ist.

Batch-Operationen

Durch die Anmeldung mit einem öffentlichen Schlüssel müssen wir bei jeder Anmeldung am Server nicht mehr jedes Mal ein Passwort eingeben. Außerdem wird das Problem der synchronen Blockierung jeder Anmeldesitzung gelöst, sodass wir die Befehlsmethode „ssh user@host“ von ssh verwenden können, um Befehle direkt auf dem Server auszuführen.

Gleichzeitig ist es, wenn wir über eine IP-Liste verfügen, möglich, eine For-Schleife zu verwenden, um die IP-Liste zu durchlaufen und Befehle stapelweise auf mehreren Servern auszuführen.

Zusammenführen von Dateien auf mehreren Servern

Vor ein paar Tagen habe ich einem Kollegen geholfen, auf mehreren Servern nach Protokollen zu suchen. Ich musste die auf mehreren Servern gefundenen Protokolle für die statistische Analyse auf derselben Maschine zusammenfassen. Ich verwende pssh, um mich bei mehreren Servern anzumelden. Da das Protokollvolumen zu groß ist, ist es nicht praktikabel, die Ergebnisse auf dem Terminal auszugeben und dann zu kopieren. Wenn eine Umleitung verwendet wird, werden die Ergebnisse an jeden Server umgeleitet.

scp

Derzeit können Sie scp verwenden. scp und ssh sind Befehle aus derselben Familie und ebenfalls sichere Übertragungsprotokolle, die auf Grundlage des SSH-Protokolls implementiert sind. Solange die öffentlichen Schlüssel jedes Servers aufbewahrt werden, ist ein kennwortfreier Betrieb wie mit dem SSH-Befehl möglich.

Eine häufige Verwendung von scp ist scp src dst, wobei der Remote-Pfad als Benutzer@Host:/Pfad ausgedrückt werden kann. Bei der Stapelanmeldung können Sie Befehle wie grep verwenden, um die Ergebnisdateien zunächst in eine Datei einzugeben, und sie dann mit dem Befehl scp auf denselben Server kopieren.

Um Dateinamenskonflikte zwischen Servern zu vermeiden, können Sie uuidgen | xargs -I {} scp result.log root@ip:/result/{} verwenden, um die Ergebnisse jedes Servers in verschiedene Dateien zu kopieren und dann cat verwenden, um die Dateien im Ergebnisordner zu einer einzigen zusammenzuführen.

keine

Natürlich speichern unsere Server in den meisten Fällen nicht die öffentlichen Schlüssel des jeweils anderen, aber der Befehl nc kann dieses Problem perfekt lösen.

Die Option -k von nc ermöglicht es dem nc-Server, die Verbindung nach Abschluss der Dateiübertragung offen zu halten. Auf diese Weise verwenden wir nc -k -4l port > result.log, um einen NC-Server zu starten, und verwenden dann grep xxx info.log | nc ip port, um die Ergebnisdaten zusammenzuführen.

Zusammenfassung

Die verschiedenen in diesem Artikel vorgestellten Tools befinden sich noch in der Entwicklungsphase. Es ist immer gut, mehr Tools zu kennen. Wenn Sie Betriebs- und Wartungsarbeiten durchführen, müssen Sie sich weiterhin auf die OPS-Plattform verlassen, um mehr Funktionen zu integrieren und eine vollständige Automatisierung zu erreichen.

Oben finden Sie Einzelheiten zur Verwendung der Shell zum Ausführen von Batch-Operationen auf mehreren Servern. Weitere Informationen zur Verwendung der Shell zum Ausführen von Batch-Operationen auf mehreren Servern finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So kommentieren und entfernen Sie Kommentare stapelweise in der Shell
  • Beispiel für die Verwendung eines Shell-Skripts zum Zählen der Dateigröße und Erstellen von Benutzern in Stapeln
  • Detaillierte Beispiele für das Stapelkopieren von Shellskripten und die Befehlsausführung
  • Verwenden Sie Shell-Skripte, um Docker-Dienste stapelweise zu starten und zu stoppen
  • Shell-Skript implementiert ssh-copy-id, um öffentliche Schlüssel automatisch stapelweise an Remote-Hosts zu senden
  • So löschen Sie ES-Indizes stapelweise mithilfe eines Shell-Skripts
  • Einfache Implementierungsmethode für das Shell-Batch-Curl-Schnittstellenskript
  • Detaillierte Erläuterung der Shell-Befehlszeilen-Stapelverarbeitung von Bilddateinamen

<<:  Detaillierte grafische Erklärung zur Verwendung von SVG im Vue3+Vite-Projekt

>>:  Verwenden Sie Bilder, um eine personalisierte Unterstreichung von Hyperlinks zu realisieren

Artikel empfehlen

MySQL-Cursor-Prinzip und Analyse von Anwendungsbeispielen

Dieser Artikel erläutert anhand von Beispielen di...

Detaillierte Erklärung zur SQL-Injection - Sicherheit (Teil 2)

Sollte dieser Artikel Fehler enthalten oder du An...

Deaktivieren Sie die IE-Bildsymbolleiste

Ich habe es gerade auf IE6 ausprobiert und die Sym...

Vue realisiert den Card-Flip-Effekt

In diesem Artikelbeispiel wird der spezifische Co...

Super ausführliches Tutorial zur Installation von MySQL 8.0.23

Inhaltsverzeichnis Vorwort 1. Laden Sie MySQL von...

Detaillierte Erläuterung des Überwachungsmethodenfalls von Vue

Überwachungsmethode in Vue betrachten Beachten Na...

Detaillierte Analyse des MySQL 8.0-Speicherverbrauchs

Inhaltsverzeichnis 1. innodb_buffer_pool_size 2. ...

Vue-Anfängerhandbuch: Umgebungserstellung und Erste Schritte

Inhaltsverzeichnis Erster Blick Erstellen einer V...

Warum node.js nicht für große Projekte geeignet ist

Inhaltsverzeichnis Vorwort 1. Anwendungskomponent...