Einführung
SSH oder Secure Shell ist ein verschlüsseltes Protokoll, das zur Verwaltung und Kommunikation mit Servern verwendet wird. Wenn Sie mit einem Rocky Linux-Server arbeiten, ist es wahrscheinlich, dass Sie die meiste Zeit in einer Terminalsession verbringen, die über SSH mit Ihrem Server verbunden ist.
In diesem Handbuch konzentrieren wir uns auf das Einrichten von SSH-Schlüsseln für einen Rocky Linux 9 Server. SSH-Schlüssel bieten eine einfache, sichere Methode zum Einloggen auf Ihren Server und werden allen Benutzern empfohlen.
Schritt 1 – Erstellen des RSA-Schlüsselpaars
Der erste Schritt besteht darin, auf dem Clientrechner (normalerweise Ihrem lokalen Computer) ein Schlüsselpaar zu erstellen:
- ssh-keygen
Standardmäßig erstellt ssh-keygen
ein 2048-Bit-RSA-Schlüsselpaar, das für die meisten Anwendungsfälle sicher genug ist (optional können Sie den -b 4096
-Flag übergeben, um einen größeren 4096-Bit-Schlüssel zu erstellen).
Nach Eingabe des Befehls sollten Sie die folgende Aufforderung sehen:
OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Drücken Sie ENTER
, um das Schlüsselpaar in das .ssh/
-Unterverzeichnis Ihres Homeverzeichnisses zu speichern, oder geben Sie einen alternativen Pfad an.
Wenn Sie zuvor ein SSH-Schlüsselpaar generiert haben, sehen Sie möglicherweise die folgende Aufforderung:
Output/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Wenn Sie sich dafür entscheiden, den Schlüssel auf der Festplatte zu überschreiben, können Sie sich nicht mehr mit dem vorherigen Schlüssel authentifizieren. Seien Sie sehr vorsichtig bei der Auswahl von Ja, da dies ein zerstörerischer Prozess ist, der nicht rückgängig gemacht werden kann.
Sie sollten dann die folgende Aufforderung sehen:
OutputEnter passphrase (empty for no passphrase):
Hier können Sie optional eine sichere Passphrase eingeben, was sehr empfehlenswert ist. Eine Passphrase bietet eine zusätzliche Sicherheitsebene für Ihren Schlüssel, um unbefugte Benutzer am Einloggen zu hindern.
Sie sollten dann die folgende Ausgabe sehen:
OutputYour identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
Sie haben jetzt einen öffentlichen und privaten Schlüssel, mit dem Sie sich authentifizieren können. Der nächste Schritt besteht darin, den öffentlichen Schlüssel auf Ihren Server zu übertragen, damit Sie die SSH-Schlüssel-basierte Authentifizierung zum Einloggen verwenden können.
Schritt 2 – Kopieren des öffentlichen Schlüssels auf Ihren Rocky Linux Server
Der schnellste Weg, Ihren öffentlichen Schlüssel auf den Rocky Linux-Host zu kopieren, ist die Verwendung eines Dienstprogramms namens ssh-copy-id
. Diese Methode wird dringend empfohlen, sofern verfügbar. Wenn Sie ssh-copy-id
nicht auf Ihrem Client-Computer zur Verfügung haben, können Sie eine der beiden folgenden alternativen Methoden verwenden (Kopieren über passwortbasiertes SSH oder manuelles Kopieren des Schlüssels).
Kopieren Ihres öffentlichen Schlüssels mit ssh-copy-id
Das Tool ssh-copy-id
ist standardmäßig in vielen Betriebssystemen enthalten, sodass es möglicherweise auf Ihrem lokalen System verfügbar ist. Damit diese Methode funktioniert, müssen Sie bereits über SSH-Zugriff mit Passwort auf Ihren Server verfügen.
Um das Dienstprogramm zu verwenden, müssen Sie lediglich den Remote-Host angeben, mit dem Sie eine Verbindung herstellen möchten, und das Benutzerkonto, über das Sie einen Passwort-SSH-Zugriff haben. Dies ist das Konto, auf das Ihr öffentlicher SSH-Schlüssel kopiert wird:
- ssh-copy-id username@remote_host
Sie sehen möglicherweise die folgende Meldung:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Dies bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Dies geschieht das erste Mal, wenn Sie eine Verbindung zu einem neuen Host herstellen. Geben Sie yes
ein und drücken Sie die Eingabetaste, um fortzufahren.
Anschließend durchsucht das Dienstprogramm Ihr lokales Konto nach dem Schlüssel id_rsa.pub
, den wir zuvor erstellt haben. Wenn es den Schlüssel findet, werden Sie nach dem Passwort des Benutzerkontos auf dem Remote-Host aufgefordert:
Output/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@203.0.113.1's password:
Geben Sie das Passwort ein (Ihre Eingabe wird aus Sicherheitsgründen nicht angezeigt) und drücken Sie die Eingabetaste. Das Dienstprogramm stellt eine Verbindung zum Konto auf dem Remote-Host unter Verwendung des von Ihnen bereitgestellten Passworts her. Anschließend kopiert es den Inhalt Ihres Schlüssels ~/.ssh/id_rsa.pub
in die Datei ~/.ssh/authorized_keys
des Remote-Benutzerkontos.
Sie sollten die folgende Ausgabe sehen:
OutputNumber of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.
An diesem Punkt wurde Ihr id_rsa.pub
-Schlüssel auf das entfernte Konto hochgeladen. Sie können mit Schritt 3 fortfahren.
Kopieren des öffentlichen Schlüssels mit SSH
Wenn Sie kein ssh-copy-id
zur Verfügung haben, aber über passwortbasierten SSH-Zugriff auf ein Konto auf Ihrem Server verfügen, können Sie Ihre Schlüssel mit einer konventionelleren SSH-Methode hochladen.
Dies können wir tun, indem wir den cat
-Befehl verwenden, um den Inhalt des öffentlichen SSH-Schlüssels auf unserem lokalen Computer zu lesen und diesen durch eine SSH-Verbindung zum Remote-Server zu leiten.
Auf der anderen Seite können wir sicherstellen, dass das Verzeichnis ~/.ssh
unter dem verwendeten Konto existiert und die richtigen Berechtigungen hat.
Dann können wir den übertragenen Inhalt in eine Datei namens authorized_keys
in diesem Verzeichnis ausgeben. Wir verwenden das >>
-Umleitsymbol, um den Inhalt anzuhängen, anstatt ihn zu überschreiben. Dadurch können wir Schlüssel hinzufügen, ohne zuvor hinzugefügte Schlüssel zu zerstören.
Der vollständige Befehl sieht so aus:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Sie sehen möglicherweise folgende Meldung:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Dies bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Dies tritt beim ersten Verbinden mit einem neuen Host auf. Geben Sie yes
ein und drücken Sie ENTER
, um fortzufahren.
Anschließend sollten Sie aufgefordert werden, das Passwort des Remote-Benutzerkontos einzugeben:
Outputusername@203.0.113.1's password:
Nach Eingabe Ihres Passworts wird der Inhalt Ihres id_rsa.pub
-Schlüssels ans Ende der Datei authorized_keys
des Remote-Benutzerkontos kopiert. Fahren Sie mit Schritt 3 fort, wenn dies erfolgreich war.
Manuelles Kopieren des öffentlichen Schlüssels
Wenn Sie keinen passwortbasierten SSH-Zugriff auf Ihren Server haben, müssen Sie den oben beschriebenen Vorgang manuell abschließen.
Wir werden den Inhalt Ihrer id_rsa.pub
-Datei manuell an die Datei ~/.ssh/authorized_keys
auf Ihrem Remote-Rechner anhängen.
Um den Inhalt Ihres id_rsa.pub
-Schlüssels anzuzeigen, geben Sie dies auf Ihrem lokalen Computer ein:
- cat ~/.ssh/id_rsa.pub
Sie sehen den Schlüsselinhalt, der ungefähr so aussehen sollte:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host
Melden Sie sich bei Ihrem Remote-Host mit der Methode Ihrer Wahl an.
Sobald Sie Zugriff auf Ihr Konto auf dem Remote-Server haben, sollten Sie sicherstellen, dass das Verzeichnis ~/.ssh
existiert. Dieser Befehl erstellt das Verzeichnis bei Bedarf oder tut nichts, wenn es bereits existiert:
- mkdir -p ~/.ssh
Jetzt können Sie die Datei authorized_keys
in diesem Verzeichnis erstellen oder ändern. Sie können den Inhalt Ihrer Datei id_rsa.pub
am Ende der Datei authorized_keys
hinzufügen. Erstellen Sie die Datei gegebenenfalls mit diesem Befehl:
- echo public_key_string >> ~/.ssh/authorized_keys
Ersetzen Sie in obigem Befehl public_key_string
durch die Ausgabe des Befehls cat ~/.ssh/id_rsa.pub
, den Sie auf Ihrem lokalen System ausgeführt haben. Es sollte mit ssh-rsa AAAA...
beginnen.
Zum Schluss stellen wir sicher, dass das Verzeichnis ~/.ssh
und die Datei authorized_keys
die entsprechenden Berechtigungen haben:
- chmod -R go= ~/.ssh
Dies entfernt rekursiv alle Berechtigungen für „Gruppe“ und „Andere“ für das Verzeichnis ~/.ssh/
.
Wenn Sie das Konto root
verwenden, um Schlüssel für ein Benutzerkonto einzurichten, ist es auch wichtig, dass das Verzeichnis ~/.ssh
dem Benutzer und nicht root
gehört:
- chown -R sammy:sammy ~/.ssh
In diesem Tutorial heißt unser Benutzer sammy, aber Sie sollten den entsprechenden Benutzernamen in den obigen Befehl einsetzen.
Wir können nun die authentifizierungsbasierte Authentifizierung mit unserem Rocky Linux-Server versuchen.
Schritt 3 – Anmelden bei Ihrem Rocky Linux-Server unter Verwendung von SSH-Schlüsseln
Wenn Sie eine der oben genannten Verfahren erfolgreich abgeschlossen haben, sollten Sie sich jetzt beim Remote-Host ohne das Passwort des Remote-Kontos anmelden können.
Der erste Vorgang ist derselbe wie bei der passwortbasierten Authentifizierung:
- ssh username@remote_host
Wenn Sie zum ersten Mal eine Verbindung zu diesem Host herstellen (wenn Sie die letzte Methode verwendet haben), sehen Sie möglicherweise so etwas:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Dies bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Geben Sie yes
ein und drücken Sie dann ENTER
, um fortzufahren.
Wenn Sie bei der Erstellung Ihres Schlüsselpaars in Schritt 1 keine Passphrase angegeben haben, werden Sie sofort angemeldet. Wenn Sie eine Passphrase angegeben haben, werden Sie jetzt aufgefordert, diese einzugeben. Nach der Authentifizierung sollte eine neue Shell-Sitzung für Sie mit dem konfigurierten Konto auf dem Rocky Linux-Server geöffnet werden.
Wenn die authentifizierung mit Schlüssel erfolgreich war, können Sie weiterhin lernen, wie Sie Ihr System weiter absichern, indem Sie die passwortbasierte Authentifizierung Ihres SSH-Servers deaktivieren.
Schritt 4 – Deaktivieren der passwortbasierten Authentifizierung auf Ihrem Server
Wenn es Ihnen gelungen ist, sich mit SSH ohne Passwort bei Ihrem Konto anzumelden, haben Sie die SSH-Schlüssel-basierte Authentifizierung erfolgreich für Ihr Konto konfiguriert. Die passwortbasierte Authentifizierung ist jedoch immer noch aktiv, was bedeutet, dass Ihr Server immer noch Angriffen mit Brute-Force ausgesetzt ist.
Bevor Sie die Schritte in diesem Abschnitt abschließen, stellen Sie sicher, dass die Authentifizierung über SSH-Schlüssel für das Benutzerkonto root auf diesem Server konfiguriert ist oder vorzugsweise, dass die Authentifizierung über SSH-Schlüssel für ein Nicht-Root-Benutzerkonto auf diesem Server mit sudo
-Berechtigungen konfiguriert ist. Dieser Schritt sperrt passwortbasierte Anmeldungen, daher ist es entscheidend sicherzustellen, dass Sie weiterhin administrativen Zugriff erhalten können.
Nachdem Sie bestätigt haben, dass Ihr Remote-Konto über administrative Berechtigungen verfügt, melden Sie sich mit SSH-Schlüsseln auf Ihrem Remote-Server an, entweder als root oder mit einem Konto mit sudo
-Berechtigungen. Öffnen Sie dann die Konfigurationsdatei des SSH-Daemons:
- sudo vi /etc/ssh/sshd_config
In der Datei suchen Sie nach einer Direktive namens PasswordAuthentication
. Diese kann mit einem #
-Hash auskommentiert sein. Drücken Sie i
, um vi
in den Einfügemodus zu versetzen, und kommentieren Sie dann die Zeile aus und setzen Sie den Wert auf no
. Dadurch wird Ihre Fähigkeit, sich über SSH mit Kontopasswörtern anzumelden, deaktiviert:
...
PasswordAuthentication no
...
Wenn Sie mit den Änderungen fertig sind, drücken Sie ESC
und dann :wq
, um die Änderungen in die Datei zu schreiben und zu beenden. Um diese Änderungen tatsächlich umzusetzen, müssen wir den sshd
-Dienst neu starten:
- sudo systemctl restart sshd
Zur Vorsicht öffnen Sie ein neues Terminalfenster und überprüfen Sie, ob der SSH-Dienst ordnungsgemäß funktioniert, bevor Sie Ihre aktuelle Sitzung schließen:
- ssh username@remote_host
Nachdem Sie überprüft haben, dass Ihr SSH-Dienst ordnungsgemäß funktioniert, können Sie alle aktuellen Server-Sitzungen sicher schließen.
Der SSH-Daemon auf Ihrem Rocky Linux Server antwortet nun nur noch auf SSH-Schlüssel. Die passwortbasierte Authentifizierung wurde erfolgreich deaktiviert.
Schlussfolgerung
Sie sollten jetzt die SSH-Schlüssel-basierte Authentifizierung auf Ihrem Server konfiguriert haben, was es Ihnen ermöglicht, sich ohne Bereitstellung eines Kontopassworts anzumelden.
Wenn Sie mehr über die Arbeit mit SSH erfahren möchten, werfen Sie einen Blick auf unseren SSH Essentials Guide.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9