SSH oder Secure Shell ist ein verschlüsseltes Protokoll zur Verwaltung und Kommunikation mit Servern. Wenn Sie mit einem CentOS-Server arbeiten, verbringen Sie wahrscheinlich die meiste Zeit in einer Terminalsitzung, die über SSH mit Ihrem Server verbunden ist.
In diesem Leitfaden konzentrieren wir uns auf die Einrichtung von SSH-Schlüsseln für einen CentOS 8-Server. SSH-Schlüssel bieten eine einfache und sichere Methode zur Anmeldung bei Ihrem Server und werden für alle Benutzer empfohlen.
Der erste Schritt besteht darin, ein Schlüsselpaar auf dem Client-Rechner (üblicherweise Ihr lokaler Computer) zu erstellen:
- ssh-keygen
Standardmäßig erzeugt ssh-keygen
ein 2048-Bit-RSA-Schlüsselpaar, das für die meisten Anwendungsfälle sicher genug ist (Sie können optional das Flag -b 4096
übergeben, um einen größeren 4096-Bit-Schlüssel zu erzeugen).
Nach Eingabe des Befehls sollten Sie die folgende Eingabeaufforderung sehen:
OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Drücken Sie die Eingabetaste
, um das Schlüsselpaar im Unterverzeichnis .ssh/
in Ihrem Stammverzeichnis zu speichern, oder geben Sie einen alternativen Pfad an.
Wenn Sie zuvor ein SSH-Schlüsselpaar erstellt haben, wird möglicherweise die folgende Eingabeaufforderung angezeigt:
Output/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Wenn Sie den Schlüssel auf der Festplatte ü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 destruktiver Prozess ist, der nicht rückgängig gemacht werden kann.
Sie sollten dann die folgende Eingabeaufforderung sehen:
OutputEnter passphrase (empty for no passphrase):
Hier können Sie optional eine sichere Passphrase eingeben, was dringend empfohlen wird. Eine Passphrase fügt Ihrem Schlüssel eine zusätzliche Sicherheitsebene hinzu, um zu verhindern, dass sich unberechtigte Benutzer anmelden.
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, die Sie zur Authentifizierung verwenden können. Der nächste Schritt besteht darin, den öffentlichen Schlüssel auf Ihren Server zu übertragen, damit Sie sich mit einer auf SSH-Schlüssel basierenden Authentifizierung anmelden können.
Der schnellste Weg zum Kopieren Ihres öffentlichen Schlüssels auf den CentOS-Host ist die Verwendung eines Dienstprogramms namens ssh-copy-id
. Diese Methode wird dringend empfohlen, falls sie verfügbar ist. Wenn Sie ssh-copy-id
auf Ihrem Client-Rechner nicht verfügbar haben, können Sie eine der beiden nachfolgenden alternativen Methoden verwenden (Kopieren über passwortbasierte SSH oder manuelles Kopieren des Schlüssels).
ssh-copy-id
Das Tool ssh-copy-id
ist in vielen Betriebssystemen standardmäßig enthalten, sodass es möglicherweise auf Ihrem lokalen System zur Verfügung steht. Damit diese Methode funktioniert, müssen Sie bereits über einen passwortbasierten SSH-Zugriff auf Ihren Server verfügen.
Um dieses Dienstprogramm zu verwenden, müssen Sie nur den Remote-Host, zu dem Sie eine Verbindung herstellen möchten, und das Benutzerkonto angeben, zu dem Sie Passwort-SSH-Zugang haben. Dies ist das Konto, auf das Ihr öffentlicher SSH-Schlüssel kopiert wird:
- ssh-copy-id username@remote_host
Möglicherweise wird die folgende Meldung angezeigt:
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
Das bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Dies geschieht, wenn Sie zum ersten Mal eine Verbindung zu einem neuen Host herstellen. Geben Sie yes
ein und drücken Sie die EINGABETASTE
, um fortzufahren.
Als Nächstes durchsucht das Dienstprogramm Ihr lokales Konto nach dem Schlüssel id_rsa.pub
, den wir zuvor erstellt haben. Wenn der Schlüssel gefunden wurde, werden Sie zur Eingabe des Passworts für das Konto des Remotebenutzers 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 mit dem von Ihnen angegebenen Passwort eine Verbindung zum Konto auf dem Remote-Host her. Es kopiert dann den Inhalt Ihres Schlüssels ~/.ssh/id_rsa.pub
in die Datei ~/.ssh/authorized_keys
.
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.
Zu diesem Zeitpunkt wurde Ihr Schlüssel id_rsa.pub
in das Remote-Konto hochgeladen. Sie können mit Schritt 3 fortfahren.
Wenn Sie ssh-copy-id
nicht zur Verfügung, aber einen passwortbasierten SSH-Zugang zu einem Konto auf Ihrem Server haben, können Sie Ihre Schlüssel mit einer konventionelleren SSH-Methode hochladen.
Wir können dazu den Befehl cat
verwenden, um den Inhalt des öffentlichen SSH-Schlüssels auf dem lokalen Computer zu lesen und über eine SSH-Verbindung zum Remote-Server weiterzuleiten.
Auf der anderen Seite können wir sicherstellen, dass das Verzeichnis ~/.ssh
existiert und die richtigen Berechtigungen für das von uns verwendete Konto besitzt.
Wir können dann den Inhalt, den wir übergeben haben, in eine Datei namens authorized_keys
in diesem Verzeichnis ausgeben. Wir verwenden das Umleitungssymbol >>
, 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 wie folgt 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"
Möglicherweise wird die folgende Meldung angezeigt:
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
Das bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Dies geschieht, wenn Sie zum ersten Mal eine Verbindung zu einem neuen Host herstellen. Geben Sie yes
ein und drücken Sie die EINGABETASTE
, um fortzufahren.
Anschließend sollten Sie aufgefordert werden, das Passwort für das Remote-Benutzerkonto einzugeben:
Outputusername@203.0.113.1's password:
Nach Eingabe Ihres Passworts wird der Inhalt Ihres Schlüssels id_rsa.pub
an das Ende der Datei authorized_keys
des Kontos des Remote-Benutzers kopiert. Wenn dies erfolgreich war, fahren Sie mit Schritt 3 fort.
Wenn Sie keinen passwortbasierten SSH-Zugriff auf Ihren Server haben, müssen Sie den obigen Vorgang manuell ausführen.
Wir werden den Inhalt Ihrer Datei id_rsa.pub
manuell an die Datei ~/.ssh/authorized_keys
auf Ihrem Remote-Computer anhängen.
Um den Inhalt Ihres Schlüssels id_rsa.pub
anzuzeigen, geben Sie Folgendes in Ihren lokalen Computer ein:
- cat ~/.ssh/id_rsa.pub
Der Inhalt des Schlüssels wird angezeigt, 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 mit der Ihnen zur Verfügung stehenden Methode an Ihrem Remote-Host an.
Sobald Sie Zugriff auf Ihr Konto auf dem Remote-Server haben, sollten Sie sicherstellen, dass das Verzeichnis ~/.ssh
vorhanden ist. Dieser Befehl erstellt bei Bedarf das Verzeichnis oder unternimmt nichts, wenn es bereits vorhanden ist:
- 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
an das Ende der Datei authorized_keys
anfügen und diese bei Bedarf mit folgendem Befehl erstellen:
- echo public_key_string >> ~/.ssh/authorized_keys
Ersetzen Sie im obigen Befehl public_key_string
durch die Ausgabe des Befehls cat~/.ssh/id_rsa.pub
, den Sie auf Ihrem lokalen System ausgeführt haben. Sie sollte mit ssh-rsa AAAA...
beginnen.
Schließlich stellen wir sicher, dass für das Verzeichnis ~/.ssh
und die Datei authorized_keys
die folgenden Berechtigungen festgelegt sind:
- chmod -R go= ~/.ssh
Dadurch werden rekursiv alle „Gruppen-“ und „anderen“ Berechtigungen für das Verzeichnis ~/.ssh/
entfernt.
Wenn Sie das Konto root
zum Einrichten von Schlüsseln für ein Benutzerkonto verwenden, 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 jetzt eine schlüsselbasierte Authentifizierung mit unserem CentOS-Server versuchen.
Wenn Sie eines der oben genannten Verfahren erfolgreich abgeschlossen haben, sollten Sie sich jetzt ohne das Passwort des Remote-Kontos am Remote-Host anmelden können.
Der anfängliche Prozess 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 oben verwendet haben), wird möglicherweise Folgendes angezeigt:
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
Das bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Geben Sie yes
ein und drücken Sie dann die EINGABETASTE
, 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 aufgefordert, diese jetzt einzugeben. Nach der Authentifizierung sollte sich eine neue Shell-Sitzung mit dem konfigurierten Konto auf dem CentOS-Server für Sie öffnen.
Wenn die schlüsselbasierte Authentifizierung erfolgreich war, fahren Sie fort, um zu erfahren, wie Sie Ihr System durch Deaktivieren der passwortbasierten Authentifizierung Ihres SSH-Servers weiter sichern können.
Wenn Sie sich mit SSH ohne Passwort bei Ihrem Konto anmelden konnten, haben Sie die auf SSH-Schlüssel basierte Authentifizierung für Ihr Konto erfolgreich konfiguriert. Ihr passwortbasierter Authentifizierungsmechanismus ist jedoch weiterhin aktiv. Dies bedeutet, dass Ihr Server weiterhin Brute-Force-Angriffen ausgesetzt ist.
Stellen Sie vor dem Ausführen der in diesem Abschnitt beschriebenen Schritte sicher, dass entweder die auf SSH-Schlüssel basierte Authentifizierung für das Root-Konto auf diesem Server konfiguriert ist oder dass vorzugsweise die auf SSH-Schlüssel basierte Authentifizierung für ein Konto ohne Rootberechtigung und mit sudo
-Privilegien konfiguriert ist. Durch diesen Schritt werden passwortbasierte Anmeldungen gesperrt. Daher ist es von entscheidender Bedeutung, dass Sie weiterhin über Administratorrechte verfügen.
Sobald Sie bestätigt haben, dass Ihr Remote-Konto über Administratorrechte verfügt, melden Sie sich mit SSH-Schlüsseln bei Ihrem Remote-Server an, entweder als Root-Benutzer oder mit einem Konto mit sudo
-Privilegien. Öffnen Sie dann die Konfigurationsdatei des SSH-Daemons:
- sudo vi /etc/ssh/sshd_config
Suchen Sie in der Datei nach einer Anweisung namens PasswordAuthentication
. Dies kann mit einem #
Hash auskommentiert werden. Drücken Sie i
, um vi
in den Einfügemodus zu versetzen, kommentieren Sie dann die Zeile aus und setzen Sie den Wert auf no
. Dadurch wird die Möglichkeit deaktiviert, sich über SSH mit Kontopasswörtern anzumelden:
...
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 diese zu verlassen. Um diese Änderungen tatsächlich zu implementieren, müssen wir den sshd
-Dienst neu starten:
- sudo systemctl restart sshd
Öffnen Sie vorsichtshalber ein neues Terminalfenster und testen Sie, ob der SSH-Dienst ordnungsgemäß funktioniert, bevor Sie Ihre aktuelle Sitzung schließen:
- ssh username@remote_host
Nachdem Sie die ordnungsgemäße Ausführung Ihres SSH-Dienstes überprüft haben, können Sie alle aktuellen Serversitzungen sicher schließen.
Der SSH-Daemon auf Ihrem CentOS-Server reagiert jetzt nur noch auf SSH-Schlüssel. Die passwortbasierte Authentifizierung wurde erfolgreich deaktiviert.
Auf Ihrem Server sollte jetzt die auf SSH-Schlüsseln basierte Authentifizierung konfiguriert sein, damit Sie sich anmelden können, ohne ein Kontopasswort anzugeben.
Wenn Sie mehr über das Arbeiten mit SSH erfahren möchten, sehen Sie sich unseren Leitfaden über SSH-Grundlagen an.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!