SSH steht für sichere Shell. Es ist ein verschlüsseltes Remote-Login-Protokoll. Sobald es auf jedem Knoten eingerichtet wurde, kann es verwendet werden, um mit verschiedenen anderen Knoten in diesem Netzwerk zu kommunizieren.
Die Hauptvorteile von SSH sind:
- SSH verwendet den RSA-Verschlüsselungsalgorithmus, um öffentliche und private Schlüssel zu generieren, wodurch ein Eindringen extrem erschwert wird.
- Da SSH ein Remote-Login-Protokoll ist, kann es auf einem Laptop konfiguriert werden. Das bedeutet, dass Sie Ihren Laptop verwenden können, um sich drahtlos mit dem Raspberry Pi-Cluster zu verbinden.
- Da Protokolle wie SCP (Secure Copy) und SFTP (Secure File Transfer Protocol) auf SSH laufen, können Sie sie verwenden, um Dateien und Ordner direkt von einem Knoten auf einen anderen zu übertragen.
- SSH unterstützt die einmalige Anmeldung. Das bedeutet, dass Sie nur bei der ersten Anmeldung Anmeldeinformationen eingeben müssen. Ab der zweiten Anmeldung ist dies nicht mehr erforderlich.
Beginnen wir mit dem Generieren von SSH-Schlüsseln. Damit SSH verwendet werden kann, sollten die Schlüssel zwischen zwei oder mehr Knoten generiert werden, damit die Datenübertragung stattfinden kann. Wir verwenden RSA zur Verschlüsselung. Beachten Sie, dass wir auf einem Knoten die Schlüssel generieren und er die privaten oder geheimen Schlüssel haben wird. Derselbe Knoten generiert auch einen öffentlichen Schlüssel, der an andere Knoten gesendet wird, die Daten an diesen Knoten senden möchten. Führen Sie die folgenden Befehle auf dem Knoten aus, von dem Sie Daten senden möchten. Ich nenne diesen Knoten "Master-Knoten" und die anderen Knoten "Worker-Knoten".
cd ~
ssh-keygen --t rsa --C "[email protected]"
Diese beiden Befehle legen den Standardspeicherort /home/pi/_ssh/id_rsa zum Speichern des Schlüssels fest.
Wenn Sie nach einer Passphrase gefragt werden, lassen Sie die Passphrase leer. Sobald dies erledigt ist, besteht der nächste Schritt darin, die öffentlichen Schlüssel an den Worker-Knoten zu senden. Stellen Sie also sicher, dass der Worker-Knoten mit dem Netzwerk verbunden ist. Jetzt können wir die Verschlüsselungsschlüssel auf dem Worker-Knoten einrichten, sodass die verwendete IP-Adresse die IP-Adresse des Worker-Knotens ist. Führen Sie den folgenden Befehl auf dem Master-Knoten aus.
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir .ssh;cat >> .ssh/authorized_keys"
Sobald die SSH-Schlüssel generiert sind, können wir uns bei jedem anderen Knoten anmelden, an den die Schlüssel vom Master-Knoten gesendet wurden, und dazu den Befehl verwenden:
ssh [email protected]
Im obigen Befehl gibt "pi" den Benutzer an, standardmäßig haben alle PIs, die Raspbian verwenden, den Benutzer als "pi" und "192.168.3.216" ist die IP meines Clients. Sie müssen es ändern, um die IP-Adresse Ihres Client-PI darzustellen.
Dies wird nach einem Passwort fragen. Sobald Sie sich angemeldet haben, werden alle von Ihnen eingegebenen Befehle auf diesem Knoten und nicht auf dem Master ausgeführt, aber die Ausgabe wird auf dem Master selbst angezeigt. SSH kann auch verwendet werden, um Befehle direkt auf den anderen Knoten auszuführen. Um beispielsweise den Hostnamen verschiedener Knoten zu ändern, verwenden Sie diese Befehle im folgenden Format:
ssh [email protected] 'sudo echo "cilent001" | sudo nano /etc/hostname'
ssh [email protected] 'sudo echo "cilent002" | sudo nano /etc/hostname'
ssh [email protected] 'sudo echo "cilent003" | sudo nano /etc/hostname'
Wie oben gezeigt, können wir SSH verwenden, um Befehle in anderen Knoten/PIs auszuführen, ohne uns tatsächlich bei ihnen anzumelden. Es folgt ein weiteres Beispiel zum sicheren Herunterfahren eines Knotens im Netzwerk mit der IP-Adresse 192.168.3.216
ssh [email protected] 'sudo poweroff'
Die folgende Abbildung zeigt, wie SSH verwendet wird, um sich bei einem Worker-Knoten (192.168.3.216) anzumelden und vom Worker-Knoten das Steuerterminal zurück zum Master-Knoten zu bringen.
Wie in der obigen Abbildung zu sehen ist, erfolgt die Anmeldung an einem Worker-Knoten direkt, also ohne Passworteingabe, außer beim ersten Mal. Aber jedes Mal, wenn die Steuerung des Terminals an den Masterknoten (192.168.3.215) zurückkehrt, müssen die Anmeldedaten eingegeben werden. Auf diese Weise ist der Master immer vor Bedrohungen von außen geschützt.
Nach der Ausgabe von Befehlen über SSH an andere Knoten kann es also Situationen geben, in denen Daten an mehrere Knoten gesendet werden müssen. Wenn die Anzahl der Knoten gering ist, können wir uns manuell bei jedem Knoten anmelden, ihn mit einem Display und einer Tastatur verbinden und Dateien senden. Dies ist jedoch eine äußerst ineffiziente Methode, wenn die Größe des Clusters groß ist. Eine einfachere Möglichkeit wäre, SCP zum Senden von Dateien zu verwenden. Installieren Sie SCP mit dem folgenden Befehl:
sudo apt-get install scp
Bitte beachten Sie, dass einige Linux-Betriebssysteme möglicherweise mit vorinstalliertem SCP geliefert werden, aber das von uns verwendete Raspbian hatte es nicht. Der allgemeine Befehl zum Senden einer einzelnen Datei lautet:
scp (Pfad der Datei auf dem lokalen Gerät) [E-Mail-geschützt] (Pfad des Remote-Standorts)
Beispiel:
scp /pi/example.c [email protected] /pi/project
Dabei wird das entfernte Gerät, an das Daten gesendet werden sollen, anhand der IP-Adresse erkannt. Viele Dateien in einem Verzeichnis können mit der rekursiven Option (-R) gesendet werden. Zum Beispiel:
scp -r /pi/project [email protected] /pi/project
Der obige Befehl überträgt rekursiv alle Dateien in /pi/project vom lokalen Host in den rekursiven Ordner auf dem Remote-Host, der durch die IP-Adresse identifiziert wird.
Das folgende Bild zeigt die verschiedenen ssh- und scp-Befehle. Es beginnt mit dem Auflisten des Inhalts seines aktuellen Ordners und ruft dann rekursiv "scp" auf, um alle Dateien im aktuellen Ordner in einen Ordner in einem anderen Knoten zu übertragen. Es meldet sich dann beim anderen Knoten an und zeigt an, dass der scp den Inhalt erfolgreich an das Ziel übertragen hat.
SCP kann mit wenigen anderen Optionen verwendet werden, um die Übertragung durchzuführen, um einige unserer Bedingungen zu erfüllen. Hier sind einige Optionen:
-
Wir können die Option "-p" verwenden, um Änderungszeiten, Zugriffszeiten und Modi der Originaldatei beizubehalten. Beispiel:
scp -p test.c [email protected]:~/
Auch hier werden die Zugriffszeit, die Zugriffsmodi und die letzte Änderungszeit der Datei "test.c" im Zielknoten beibehalten.
-
SCP ermöglicht das Komprimieren der Dateien, bevor sie über das Netzwerk an das Ziel gesendet werden können. Dies ist sehr nützlich, wenn die zu übertragenden Dateien sehr groß sind und die Komprimierung daher die Geschwindigkeit erhöht, mit der sie gesendet werden. Dazu verwenden wir die Option "-C". Beispiel:
scp -pC test.c [email protected]:~/
Hier können wir sehen, dass mehrere Optionen verwendet werden können und beide Funktionen auf den Befehl angewendet werden.
-
Bei der Socket-Programmierung werden Daten über Ports gesendet und empfangen, und SCP kann verwendet werden, um Daten über bestimmte Ports an den Remote-Host zu senden. Dies kann mit der Option "-P" erfolgen.Beispiel:
scp -P 21938 test.c [email protected]:~/
Hier ist der zum Senden von Daten verwendete Port 1938.
-
Es kann Fälle geben, in denen Sie den Status der Dateiübertragung nicht wissen möchten, wie im obigen Bild. Es ist sinnvoll, den Übertragungsstatus bei einer großen Anzahl von Dateien auszuschalten. Wir können dies tun, indem wir die Option "-q" verwenden. Beispiel:
scp -rq ~/files [email protected]:~/files
Hier wird der Inhalt des Ordners mit dem Namen Dateien in den Ordner Dateien auf einem anderen Knoten übertragen, aber die Statusleiste und die Debug-Meldungen sind alle deaktiviert, dh nicht angezeigt.