Einrichten von SSH-Schlüsseln unter Ubuntu 16.04
Einführung
SSH oder Secure Shell ist ein verschlüsseltes Protokoll zur Verwaltung und Kommunikation mit Servern. Wenn Sie mit einem Ubuntu-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 das Einrichten von SSH-Schlüsseln für eine Vanilla Ubuntu 16.04-Installation. SSH-Schlüssel bieten eine einfache und sichere Möglichkeit, sich bei Ihrem Server anzumelden, und werden allen Benutzern empfohlen.
Schritt 1 — Erstellen Sie das RSA-Schlüsselpaar
Der erste Schritt besteht darin, ein Schlüsselpaar auf dem Clientcomputer (normalerweise Ihrem Computer) zu erstellen:
- ssh-keygen
Standardmäßig ssh-keygen
erstellt ein 2048-Bit-RSA-Schlüsselpaar, das für die meisten Anwendungsfälle sicher genug ist (Sie können optional das -b 4096
Flag zum Erstellen eines größeren 4096-Bit-Schlüssels).
Nach Eingabe des Befehls sollten Sie die folgende Ausgabe 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 im .ssh/
Unterverzeichnis in Ihrem Home-Verzeichnis zu speichern, oder geben Sie einen alternativen Pfad an.
Wenn Sie zuvor ein SSH-Schlüsselpaar generiert hatten, 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, wenn Sie Ja auswählen, 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 sehr zu empfehlen ist. 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 Tutorial zum Konfigurieren der SSH-schlüsselbasierten Authentifizierung auf einem Linux-Server.
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_hostThe key's randomart image is:+------+| ..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 Ihrem Server zu platzieren, damit Sie sich mit der SSH-schlüsselbasierten Authentifizierung anmelden können.
Schritt 2 – Kopieren Sie den öffentlichen Schlüssel auf den Ubuntu-Server
Der schnellste Weg, Ihren öffentlichen Schlüssel auf den Ubuntu-Host zu kopieren, ist die Verwendung eines Dienstprogramms namens ssh-copy-id
. Aufgrund seiner Einfachheit wird diese Methode dringend empfohlen, falls verfügbar. Wenn Ihnen ssh-copy-id
auf Ihrem Clientcomputer nicht zur Verfügung steht, können Sie eine der beiden in diesem Abschnitt beschriebenen alternativen Methoden verwenden (Kopieren über kennwortbasiertes SSH oder manuelles Kopieren des Schlüssels).
Kopieren des öffentlichen Schlüssels mit ssh-copy-id
Das ssh-copy-id
-Tool 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 einen kennwortbasierten SSH-Zugriff 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, auf das Sie über das Kennwort SSH zugreifen können. Dies ist das Konto, auf das Ihr öffentlicher SSH-Schlüssel kopiert wird.
Die Syntax ist:
- 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
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.
Als nächstes scannt das Dienstprogramm Ihr lokales Konto nach dem id_rsa.pub
Schlüssel, den wir zuvor erstellt haben. Wenn der Schlüssel gefunden wird, werden Sie zur Eingabe des Kennworts des Kontos des Remote-Benutzers 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 [email protected]'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 ~/.ssh
Verzeichnis des Remote-Kontos mit dem Namen authorized_keys
kopiert.
Sie sollten die folgende Ausgabe sehen:
OutputNumber 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 Remote-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 einen passwortbasierten SSH-Zugriff auf ein Konto auf Ihrem Server haben, 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 Remote-Server weiterzuleiten.
Auf der anderen Seite können wir sicherstellen, dass das ~/.ssh
Verzeichnis existiert und die richtigen Berechtigungen unter dem Benutzerkonto hat.
Wir können dann den Inhalt, über den wir geleitet 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 folgendermaßen 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
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.
Danach sollten Sie aufgefordert werden, das Passwort für das Remote-Benutzerkonto einzugeben:
Output [email protected]'s password:
Nach Eingabe Ihres Passworts wird der Inhalt Ihres id_rsa.pub
-Schlüssels an das Ende der authorized_keys
-Datei 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 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.
Um den Inhalt Ihres id_rsa.pub
Schlüssels anzuzeigen, geben Sie Folgendes in Ihren lokalen Computer ein:
- 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 mit der verfügbaren Methode auf Ihren Remote-Host zu.
Sobald Sie Zugriff auf Ihr Konto auf dem Remote-Server haben, sollten Sie sicherstellen, dass das Verzeichnis ~/.ssh
vorhanden ist. Dieser Befehl erstellt das Verzeichnis bei Bedarf oder führt nichts aus, wenn es bereits vorhanden ist:
- mkdir -p ~/.ssh
Jetzt können Sie die authorized_keys
-Datei in diesem Verzeichnis erstellen oder ändern. Sie können den Inhalt Ihrer id_rsa.pub
-Datei am Ende der authorized_keys
-Datei hinzufügen und bei Bedarf mit diesem Befehl erstellen:
- echo public_key_string >> ~/.ssh/authorized_keys
Ersetzen Sie im obigen Befehl die public_key_string
durch die Ausgabe der cat ~/.ssh/id_rsa.pub
Befehl, den Sie auf Ihrem lokalen System ausgeführt haben. Es 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 ~/.ssh/
Verzeichnis.
Wenn Sie das root
-Konto verwenden, um Schlüssel für ein Benutzerkonto einzurichten, ist es auch wichtig, dass das ~/.ssh
-Verzeichnis 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 einfügen.
Wir können jetzt versuchen, die passwortlose Authentifizierung mit unserem Ubuntu-Server durchzuführen.
Schritt 3 – Authentifizieren Sie sich mit SSH-Schlüsseln bei Ubuntu Server
Wenn Sie eines der oben genannten Verfahren erfolgreich abgeschlossen haben, sollten Sie sich ohne das Kennwort des Remote-Kontos beim Remote-Host anmelden können.
Der grundlegende Prozess ist derselbe:
- ssh username@remote_host
Wenn Sie zum ersten Mal eine Verbindung zu diesem Host herstellen (wenn Sie die letzte Methode oben verwendet haben), sehen Sie möglicherweise Folgendes:
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 keine Passphrase für Ihren privaten Schlüssel angegeben haben, werden Sie sofort angemeldet. Wenn Sie beim Erstellen des Schlüssels eine Passphrase für den privaten Schlüssel angegeben haben, werden Sie aufgefordert, ihn jetzt einzugeben (beachten Sie, dass Ihre Tastatureingaben aus Sicherheitsgründen nicht in der Terminalsitzung angezeigt werden). Nach der Authentifizierung sollte eine neue Shell-Sitzung mit dem konfigurierten Konto auf dem Ubuntu-Server für Sie geöffnet werden.
Wenn die schlüsselbasierte Authentifizierung erfolgreich war, lesen Sie weiter, um zu erfahren, wie Sie Ihr System weiter sichern 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 kennwortbasierter Authentifizierungsmechanismus ist jedoch weiterhin aktiv, was bedeutet, dass Ihr Server weiterhin Brute-Force-Angriffen ausgesetzt ist.
Bevor Sie die Schritte in diesem Abschnitt ausführen, stellen Sie sicher, dass Sie entweder die SSH-schlüsselbasierte Authentifizierung für das Root-Konto auf diesem Server konfiguriert haben oder dass Sie vorzugsweise die SSH-schlüsselbasierte Authentifizierung für ein Nicht-Root-Konto auf diesem Server mit sudo
-Berechtigungen konfiguriert haben. In diesem Schritt werden kennwortbasierte Anmeldungen gesperrt, sodass es wichtig ist, sicherzustellen, dass Sie weiterhin administrativen Zugriff erhalten.
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 sudo
-Rechten. Öffnen Sie dann die Konfigurationsdatei des SSH-Daemons:
- sudo nano /etc/ssh/sshd_config
Suchen Sie in der Datei nach einer Direktive namens PasswordAuthentication
. Dies kann auskommentiert werden. Kommentieren Sie die Zeile aus und setzen Sie den Wert auf „Nein“. Dadurch wird Ihre Möglichkeit deaktiviert, sich über SSH mit Kontokennwörtern anzumelden:
...PasswordAuthentication no...
Speichern und schließen Sie die Datei, wenn Sie fertig sind, indem Sie CTRL
X
, dann Y
speichern der Datei und schließlich ENTER
, um nano zu beenden. Um diese Änderungen tatsächlich zu implementieren, müssen wir den Dienst sshd
neu starten:
- sudo systemctl restart ssh
Öffnen Sie vorsichtshalber ein neues Terminalfenster und testen Sie, ob der SSH-Dienst ordnungsgemäß funktioniert, bevor Sie diese Sitzung schließen:
- ssh username@remote_host
Sobald Sie Ihren SSH-Dienst überprüft haben, können Sie alle aktuellen Serversitzungen sicher schließen.
Der SSH-Daemon auf Ihrem Ubuntu-Server reagiert jetzt nur noch auf SSH-Schlüssel. Die passwortbasierte Authentifizierung wurde erfolgreich deaktiviert.
Fazit
Sie sollten jetzt die SSH-schlüsselbasierte Authentifizierung auf Ihrem Server konfiguriert haben, sodass Sie sich anmelden können, ohne ein Kontokennwort anzugeben.
Wenn Sie mehr über die Arbeit mit SSH erfahren möchten, werfen Sie einen Blick auf unseren SSH Essentials Guide.