Einrichten von SSH-Schlüsseln unter CentOS 7

Einführung

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 Handbuch konzentrieren wir uns auf die Einrichtung von SSH-Schlüsseln für eine Vanilla CentOS 7-Installation. SSH-Schlüssel bieten eine einfache und sichere Möglichkeit, sich bei Ihrem Server anzumelden. Sie werden allen Benutzern empfohlen.

Schritt 1 - Erstellen Sie das RSA-Schlüsselpaar

Der erste Schritt besteht darin, ein Schlüsselpaar auf dem Client-Computer (normalerweise Ihrem Computer) 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 (Sie können optional das Flag " -b 4096 +" übergeben, um einen größeren 4096-Bit-Schlüssel zu erstellen ).

Nach Eingabe des Befehls sollte die folgende Eingabeaufforderung angezeigt werden:

OutputGenerating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa):

Drücken Sie + ENTER +, um das Schlüsselpaar im Unterverzeichnis + .ssh / + in Ihrem Home-Verzeichnis zu speichern, oder geben Sie einen alternativen Pfad an.

Wenn Sie zuvor ein SSH-Schlüsselpaar generiert haben, wird möglicherweise die folgende Eingabeaufforderung angezeigt:

Output/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, die dringend empfohlen wird. Eine Passphrase fügt eine zusätzliche Sicherheitsebene hinzu, um zu verhindern, dass sich nicht autorisierte Benutzer anmelden. Weitere Informationen zur Sicherheit finden Sie in unserem Lernprogramm unter https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server[How To Configure SSH Schlüsselbasierte Authentifizierung auf einem Linux-Server.

Sie sollten dann die folgende Ausgabe sehen:

OutputYour identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.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 einen privaten Schlüssel, mit denen Sie sich authentifizieren können. Der nächste Schritt besteht darin, den öffentlichen Schlüssel auf Ihrem Server abzulegen, damit Sie sich mithilfe der SSH-Schlüsselauthentifizierung anmelden können.

Schritt 2 - Kopieren Sie den öffentlichen Schlüssel auf CentOS Server

Der schnellste Weg, Ihren öffentlichen Schlüssel auf den CentOS-Host zu kopieren, ist die Verwendung eines Dienstprogramms mit dem Namen "+ ssh-copy-id ". Aufgrund der Einfachheit wird diese Methode dringend empfohlen, sofern verfügbar. Wenn Sie auf Ihrem Client-Computer nicht über " ssh-copy-id +" verfügen, können Sie eine der beiden in diesem Abschnitt beschriebenen alternativen Methoden verwenden (Kopieren über passwortbasiertes SSH oder manuelles Kopieren des Schlüssels).

Kopieren Sie Ihren öffentlichen Schlüssel mit + ssh-copy-id

Das Tool + ssh-copy-id + ist in vielen Betriebssystemen standardmäßig enthalten, sodass Sie es möglicherweise auf Ihrem lokalen System zur Verfügung haben. Damit diese Methode funktioniert, müssen Sie bereits über einen kennwortbasierten SSH-Zugriff auf Ihren Server verfügen.

Um das Dienstprogramm zu verwenden, müssen Sie nur den Remote-Host, zu dem Sie eine Verbindung herstellen möchten, und das Benutzerkonto angeben, auf das Sie über ein Kennwort für SSH-Zugriff verfügen. Auf dieses Konto wird Ihr öffentlicher SSH-Schlüssel kopiert.

Die Syntax lautet:

ssh-copy-id @

Möglicherweise wird die folgende Meldung angezeigt:

OutputThe authenticity of host ' ()' 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)?

Dies bedeutet nur, 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 "+ ENTER", 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 Kennworts 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
@'s password:

Geben Sie das Passwort ein (Ihre Eingabe wird aus Sicherheitsgründen nicht angezeigt) und drücken Sie + ENTER +. Das Dienstprogramm stellt mit dem von Ihnen angegebenen Kennwort eine Verbindung zum Konto auf dem Remote-Host her. Anschließend wird der Inhalt Ihres "+ ~ / .ssh / id_rsa.pub " - Schlüssels in eine Datei im Home-Verzeichnis des Remote-Kontos " ~ / .ssh " mit dem Namen " authorized_keys +" kopiert.

Sie sollten die folgende Ausgabe sehen:

OutputNumber of key(s) added: 1

Now try logging into the machine, with:   "ssh '@'"
and check to make sure that only the key(s) you wanted were added.

Zu diesem Zeitpunkt wurde Ihr "+ id_rsa.pub +" - Schlüssel auf das Remote-Konto hochgeladen. Sie können mit https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-centos7#step-3-%E2%80%94-authenticate-to- fortfahren. Ihr-Centos-Server-mit-SSH-Schlüsseln [Schritt 3].

Kopieren des öffentlichen Schlüssels mit SSH

Wenn Sie nicht über "+ ssh-copy-id +" verfügen, aber einen kennwortbasierten SSH-Zugriff auf ein Konto auf Ihrem Server haben, können Sie Ihre Schlüssel mit einer herkömmlichen SSH-Methode hochladen.

Verwenden Sie dazu den Befehl "+ cat +", um den Inhalt des öffentlichen SSH-Schlüssels auf unserem 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 mit dem Namen "+ 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 folgendermaßen aus:

cat ~/.ssh/id_rsa.pub | ssh @ "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 ' ()' 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)?

Dies 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 "+ ENTER", um fortzufahren.

Anschließend sollten Sie aufgefordert werden, das Kennwort für das Remote-Benutzerkonto einzugeben:

Output@'s password:

Nach der 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. Fahren Sie fort mit https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-1604#step-3-%E2%80%94-authenticate-to- Ubuntu-Server-mit-SSH-Schlüssel [Schritt 3], wenn dies erfolgreich war.

Manuelles Kopieren des öffentlichen Schlüssels

Wenn Sie keinen kennwortbasierten SSH-Zugriff auf Ihren Server haben, müssen Sie den obigen Vorgang manuell ausführen.

Wir werden den Inhalt Ihrer "+ id_rsa.pub " - Datei manuell an die " ~ / .ssh / authorized_keys +" - Datei auf Ihrem Remote-Computer anhängen.

Geben Sie Folgendes in Ihren lokalen Computer ein, um den Inhalt Ihres Schlüssels "+ id_rsa.pub +" anzuzeigen:

cat ~/.ssh/id_rsa.pub

Sie sehen den Inhalt des Schlüssels, 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== demo@test

Greifen Sie auf Ihren Remote-Host zu, und verwenden Sie dabei die jeweils verfügbare Methode.

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  >> ~/.ssh/authorized_keys

Ersetzen Sie im obigen Befehl "+" 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.

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 : ~/.ssh

In diesem Tutorial wird unser Benutzer benannt, aber Sie sollten den entsprechenden Benutzernamen in den obigen Befehl einsetzen.

Wir können jetzt eine passwortlose Authentifizierung mit unserem Ubuntu-Server versuchen.

Schritt 3 - Authentifizieren Sie sich mit SSH-Schlüsseln bei Ihrem CentOS-Server

Wenn Sie eines der oben genannten Verfahren erfolgreich abgeschlossen haben, sollten Sie sich beim Remote-Host anmelden können, ohne das Kennwort des Remote-Kontos zu verwenden.

Der grundlegende Prozess ist der gleiche:

ssh @

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 ' ()' 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)?

Dies bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Geben Sie "yes" ein und drücken Sie "+ ENTER", um fortzufahren.

Wenn Sie keine Passphrase für Ihren privaten Schlüssel angegeben haben, werden Sie sofort angemeldet. Wenn Sie bei der Erstellung eine Passphrase für den privaten Schlüssel eingegeben haben, werden Sie aufgefordert, die Passphrase jetzt einzugeben. Nach der Authentifizierung sollte eine neue Shell-Sitzung mit dem auf dem CentOS-Server konfigurierten Konto für Sie geöffnet werden.

Wenn die schlüsselbasierte Authentifizierung erfolgreich war, erfahren Sie weiter, wie Sie Ihr System durch Deaktivieren der Kennwortauthentifizierung weiter sichern können.

Schritt 4 - Deaktivieren Sie die Kennwortauthentifizierung auf Ihrem Server

Wenn Sie sich mit SSH ohne Kennwort bei Ihrem Konto anmelden konnten, haben Sie die SSH-Schlüsselauthentifizierung für Ihr Konto erfolgreich konfiguriert. Ihr kennwortbasierter 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 SSH-Schlüsselauthentifizierung für das Root-Konto auf diesem Server konfiguriert ist, oder dass vorzugsweise die SSH-Schlüsselauthentifizierung für ein Nicht-Root-Konto konfiguriert ist Server mit + sudo + Privilegien. Durch diesen Schritt werden kennwortbasierte Anmeldungen gesperrt. Daher ist es wichtig, 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 oder mit einem Konto mit den Rechten "+ sudo +". Öffnen Sie dann die Konfigurationsdatei des SSH-Dämons:

sudo vi /etc/ssh/sshd_config

Suchen Sie in der Datei nach einer Direktive mit dem Namen "+ PasswordAuthentication ". Dies kann auskommentiert werden. Drücken Sie ` i +`, um Text einzufügen, kommentieren Sie die Zeile aus und setzen Sie den Wert auf “no”. Dies deaktiviert Ihre Fähigkeit, sich über SSH mit Kontokennwörtern anzumelden:

/ etc / ssh / sshd_config

...
PasswordAuthentication
...

Wenn Sie 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 zu implementieren, müssen wir den Dienst ` sshd +` neu starten:

sudo systemctl restart sshd.service

Öffnen Sie vorsichtshalber ein neues Terminalfenster und testen Sie, ob der SSH-Dienst ordnungsgemäß funktioniert, bevor Sie diese Sitzung schließen:

ssh @

Nachdem Sie Ihren SSH-Dienst überprüft haben, können Sie alle aktuellen Serversitzungen sicher schließen.

Der SSH-Daemon auf Ihrem CentOS-Server reagiert nur noch auf SSH-Schlüssel. Die kennwortbasierte Authentifizierung wurde erfolgreich deaktiviert.

Fazit

Auf Ihrem Server sollte jetzt die SSH-Schlüssel-basierte Authentifizierung konfiguriert sein, damit Sie sich anmelden können, ohne ein Kontokennwort anzugeben.

Wenn Sie mehr über die Arbeit mit SSH erfahren möchten, besuchen Sie unsere https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys [ SSH Essentials-Handbuch].