Einrichten von SSH-Schlüsseln unter CentOS 7

Einführung

SSH, oder Secure Shell, ist ein verschlüsseltes Protokoll, das zur Verwaltung und Kommunikation mit Servern verwendet wird. Wenn Sie mit einem CentOS-Server arbeiten, werden Sie wahrscheinlich die meiste Zeit in einer Terminalsitzung verbringen, die über SSH mit dem Server verbunden ist.

In dieser Anleitung konzentrieren wir uns auf die Einrichtung von SSH-Schlüsseln für eine einfache CentOS 7-Installation. SSH-Schlüssel bieten eine einfache und sichere Möglichkeit, sich bei Ihrem Server anzumelden und werden für alle Benutzer empfohlen.

Schritt 1 – Erzeugen des RSA-Schlüsselpaares

Der erste Schritt besteht darin, ein Schlüsselpaar auf dem Client-Rechner (normalerweise Ihr Computer) zu erzeugen:

  • 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 -b 4096-Flag übergeben, um einen größeren 4096-Bit-Schlüssel zu erzeugen).

Nach der Eingabe des Befehls sollten Sie die folgende Eingabeaufforderung sehen:

Output
Generating 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 im Unterverzeichnis .ssh/ in Ihrem Home-Verzeichnis zu speichern, oder geben Sie einen alternativen Pfad an.

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

Output
/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?

Wenn Sie den Schlüssel auf der Festplatte überschreiben möchten, können Sie sich nicht mehr mit dem vorherigen Schlüssel authentifizieren. Seien Sie sehr vorsichtig, wenn Sie Ja wählen, da dies ein zerstörerischer Vorgang ist, der nicht rückgängig gemacht werden kann.

Sie sollten dann die folgende Eingabeaufforderung sehen:

Output
Enter passphrase (empty for no passphrase):

Hier können Sie optional eine sichere Passphrase eingeben, was dringend empfohlen wird. Eine Passphrase bietet eine zusätzliche Sicherheitsebene, um zu verhindern, dass sich unbefugte Benutzer anmelden. Um mehr über Sicherheit zu erfahren, lesen Sie unser Tutorial How To Configure SSH Key-Based Authentication on a Linux Server.

Sie sollten dann die folgende Ausgabe sehen:

Output
Your 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 [email protected]_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

Sie haben nun einen öffentlichen und einen privaten Schlüssel, die Sie zur Authentifizierung verwenden können. Der nächste Schritt besteht darin, den öffentlichen Schlüssel auf Ihrem Server zu platzieren, damit Sie die SSH-Schlüssel-basierte Authentifizierung zur Anmeldung verwenden können.

Schritt 2 – Kopieren des öffentlichen Schlüssels auf den CentOS-Server

Der schnellste Weg, Ihren öffentlichen Schlüssel auf den CentOS-Host zu kopieren, ist die Verwendung eines Dienstprogramms namens ssh-copy-id. Aufgrund seiner Einfachheit ist diese Methode sehr empfehlenswert, wenn sie verfügbar ist. Wenn Ihnen ssh-copy-id auf Ihrem Client-Rechner nicht zur Verfügung steht, können Sie eine der beiden alternativen Methoden in diesem Abschnitt verwenden (Kopieren über passwortbasiertes SSH oder manuelles Kopieren des Schlüssels).

Kopieren des öffentlichen Schlüssels mit ssh-copy-id

Das Tool ssh-copy-id ist in vielen Betriebssystemen standardmäßig enthalten, so dass es auf Ihrem lokalen System verfügbar sein könnte. Damit diese Methode funktioniert, müssen Sie bereits über einen passwortbasierten SSH-Zugang zu Ihrem Server verfügen.

Um das Tool zu verwenden, müssen Sie nur den entfernten Host angeben, zu dem Sie eine Verbindung herstellen möchten, sowie das Benutzerkonto, zu dem Sie über einen passwortbasierten SSH-Zugang verfügen. Auf dieses Konto wird Ihr öffentlicher SSH-Schlüssel kopiert.

Die Syntax lautet:

Es kann sein, dass Sie folgende Meldung erhalten:

Output
The 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 nur, dass Ihr lokaler Computer den entfernten Host nicht erkennt. Dies geschieht, wenn Sie zum ersten Mal eine Verbindung zu einem neuen Host herstellen. Geben Sie „ja“ ein und drücken Sie ENTER, um fortzufahren.

Als Nächstes wird das Dienstprogramm Ihr lokales Konto nach dem Schlüssel id_rsa.pub durchsuchen, den wir zuvor erstellt haben. Wenn es den Schlüssel findet, werden Sie aufgefordert, das Kennwort für das Konto des entfernten Benutzers einzugeben:

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 [email protected]'s password:

Tippen Sie das Kennwort ein (Ihre Eingaben werden aus Sicherheitsgründen nicht angezeigt) und drücken Sie ENTER. Das Dienstprogramm stellt mit dem von Ihnen eingegebenen Kennwort eine Verbindung zu dem Konto auf dem entfernten Host her. Es kopiert dann den Inhalt Ihres ~/.ssh/id_rsa.pub-Schlüssels in eine Datei im Home-Verzeichnis ~/.ssh des entfernten Kontos mit dem Namen authorized_keys.

Sie sollten die folgende Ausgabe sehen:

Output
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"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 entfernte Konto hochgeladen. Sie können mit Schritt 3 fortfahren.

Kopieren des öffentlichen Schlüssels mit SSH

Wenn Sie ssh-copy-id nicht zur Verfügung haben, aber über einen passwortbasierten SSH-Zugang zu einem Konto auf Ihrem Server verfügen, können Sie Ihre Schlüssel mit einer herkömmlichen SSH-Methode hochladen.

Wir können dies tun, indem wir den Befehl cat verwenden, um den Inhalt des öffentlichen SSH-Schlüssels auf unserem lokalen Computer zu lesen und diesen über eine SSH-Verbindung an den entfernten Server weiterzuleiten.

Auf der anderen Seite können wir sicherstellen, dass das Verzeichnis ~/.ssh existiert und die richtigen Berechtigungen unter dem von uns verwendeten Konto hat.

Dann können wir den Inhalt, den wir über die Pipeline übertragen haben, in eine Datei namens authorized_keys in diesem Verzeichnis ausgeben. Wir verwenden das Umleitungssymbol >>, um den Inhalt anzuhängen, anstatt ihn zu überschreiben. Auf diese Weise 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 [email protected]_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Es kann sein, dass Sie die folgende Meldung sehen:

Output
The 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 entfernten Host nicht erkennt. Dies ist der Fall, wenn Sie zum ersten Mal eine Verbindung zu einem neuen Host herstellen. Geben Sie „ja“ ein und drücken Sie ENTER, um fortzufahren.

Danach sollten Sie aufgefordert werden, das Passwort für das entfernte Benutzerkonto einzugeben:

Output
[email protected]'s password:

Nach der Eingabe Ihres Passworts wird der Inhalt Ihres id_rsa.pub-Schlüssels an das Ende der authorized_keys-Datei des entfernten Benutzerkontos kopiert. Fahren Sie mit Schritt 3 fort, wenn dies erfolgreich war.

Öffentlichen Schlüssel manuell kopieren

Wenn Sie keinen passwortbasierten SSH-Zugang zu Ihrem Server haben, müssen Sie den obigen Prozess manuell durchführen.

Wir werden den Inhalt Ihrer id_rsa.pub-Datei manuell an die ~/.ssh/authorized_keys-Datei auf dem entfernten Rechner anhängen.

Um den Inhalt Ihres id_rsa.pub-Schlüssels anzuzeigen, geben Sie auf Ihrem lokalen Computer Folgendes ein:

  • cat ~/.ssh/id_rsa.pub

Sie sehen den Inhalt des Schlüssels, der in etwa so aussehen sollte:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== [email protected]

Zugriff auf Ihren entfernten Host mit der Ihnen zur Verfügung stehenden Methode.

Sobald Sie Zugang zu Ihrem Konto auf dem entfernten Server haben, sollten Sie sicherstellen, dass das Verzeichnis ~/.ssh existiert. Dieser Befehl erstellt das Verzeichnis, falls nötig, oder tut nichts, wenn es bereits existiert:

  • mkdir -p ~/.ssh

Nun können Sie die Datei authorized_keys in diesem Verzeichnis erstellen oder ändern. Sie können den Inhalt Ihrer id_rsa.pub-Datei an das Ende der authorized_keys-Datei anhängen und sie, falls erforderlich, mit diesem Befehl erstellen:

  • echo public_key_string >> ~/.ssh/authorized_keys

Ersetzen Sie im obigen Befehl das public_key_string durch die Ausgabe des cat ~/.ssh/id_rsa.pub-Befehls, den Sie auf Ihrem lokalen System ausgeführt haben. Sie sollte mit ssh-rsa AAAA... beginnen.

Schließlich stellen wir sicher, dass das Verzeichnis ~/.ssh und die Datei authorized_keys über die entsprechenden Berechtigungen verfügen:

  • chmod -R go= ~/.ssh

Dies entfernt rekursiv alle „Gruppen-“ und „anderen“ Berechtigungen 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 passwortlose Authentifizierung mit unserem Ubuntu-Server versuchen.

Schritt 3 – Authentifizierung bei Ihrem CentOS-Server mit SSH-Schlüsseln

Wenn Sie eine der oben genannten Prozeduren erfolgreich abgeschlossen haben, sollten Sie in der Lage sein, sich bei dem entfernten Host ohne das Passwort des entfernten Kontos anzumelden.

Der grundlegende Prozess ist derselbe:

Wenn Sie zum ersten Mal eine Verbindung zu diesem Host herstellen (wenn Sie die letzte Methode oben verwendet haben), sehen Sie möglicherweise etwas wie dieses:

Output
The 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 „ja“ ein und drücken Sie dann ENTER, um fortzufahren.

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

Wenn die schlüsselbasierte Authentifizierung erfolgreich war, fahren Sie fort, um zu erfahren, wie Sie Ihr System weiter absichern können, indem Sie die Kennwortauthentifizierung deaktivieren.

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üsselbasierte Authentifizierung für Ihr Konto erfolgreich konfiguriert. Ihr passwortbasierter Authentifizierungsmechanismus ist jedoch immer noch aktiv, was bedeutet, dass Ihr Server immer noch für Brute-Force-Angriffe anfällig ist.

Bevor Sie die Schritte in diesem Abschnitt ausführen, stellen Sie sicher, dass Sie entweder die SSH-Schlüssel-basierte Authentifizierung für das Root-Konto auf diesem Server konfiguriert haben oder vorzugsweise, dass Sie die SSH-Schlüssel-basierte Authentifizierung für ein Nicht-Root-Konto auf diesem Server mit sudo-Rechten konfiguriert haben. Dieser Schritt sperrt passwortbasierte Anmeldungen, daher ist es wichtig sicherzustellen, dass Sie immer noch in der Lage sind, administrativen Zugriff zu erhalten.

Wenn Sie sich vergewissert haben, dass Ihr Remote-Konto über administrative Rechte verfügt, melden Sie sich mit SSH-Schlüsseln bei Ihrem Remote-Server an, entweder als root oder mit einem Konto mit sudo-Rechten. Öffnen Sie dann die Konfigurationsdatei des SSH-Daemons:

  • sudo vi /etc/ssh/sshd_config

Suchen Sie in der Datei nach einer Direktive namens PasswordAuthentication. Diese kann auskommentiert sein. Drücken Sie i, um Text einzufügen, und heben Sie dann die Kommentierung der Zeile auf und setzen Sie den Wert auf „no“. Dadurch wird die Möglichkeit deaktiviert, sich über SSH mit Kontopasswörtern anzumelden:

/etc/ssh/sshd_config
...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 zu implementieren, müssen wir den sshd-Dienst neu starten:

  • sudo systemctl restart sshd.service

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

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

Der SSH-Daemon auf Ihrem CentOS-Server antwortet jetzt nur noch auf SSH-Schlüssel. Die passwortbasierte Authentifizierung wurde erfolgreich deaktiviert.

Schlussfolgerung

Sie sollten nun eine SSH-Schlüssel-basierte Authentifizierung auf Ihrem Server konfiguriert haben, die es Ihnen ermöglicht, sich ohne Angabe eines Kontopassworts anzumelden.

Wenn Sie mehr über die Arbeit mit SSH erfahren möchten, werfen Sie einen Blick auf unseren SSH Essentials Guide.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.