So richten Sie SSH-Schlüssel unter Ubuntu 16.04 ein

Einführung

SSH, auch bekannt als Secure Shell, ist ein verschlüsseltes Protokoll, das üblicherweise zur Verwaltung und Kommunikation mit Servern verwendet wird. Dies gilt insbesondere für die Arbeit mit einem Ubuntu-Server. In diesem Tutorial liegt der Schwerpunkt auf der Einrichtung von SSH-Schlüsseln für Ubuntu 16.04. SSH-Schlüssel werden allen Benutzern empfohlen und bieten eine einfache und sichere Möglichkeit, sich bei Ihrem Server anzumelden.

Schritt 1 – Erstellen des RSA-Schlüsselpaars

Der erste Schritt beim Einrichten der SSH-Schlüssel besteht darin, ein Schlüsselpaar auf dem Client-Computer (im Allgemeinen auf einem Computer) zu erstellen:


$ ssh-keygen

Zunächst erstellt der SSH-Keygen ein 2048-Bit-RSA-Schlüsselpaar, das für die meisten Anwendungsfälle ausreichend Sicherheit bietet.

Alternativ können Sie optional das Flag -b 4096 übergeben, um einen größeren 4096-Bit-Schlüssel zu erstellen

Nach der Eingabe des Befehls sollte die folgende Eingabeaufforderung angezeigt werden:


Output

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 Home-Verzeichnis oder in einem benutzerdefinierten alternativen Pfad zu speichern.
Die folgende Eingabeaufforderung sollte erscheinen:


Output

Enter passphrase ( leave empty for no passphrase):

Optional können Sie eine sichere Passphrase eingeben, was dringend empfohlen wird. Eine Passphrase bietet zusätzliche Sicherheit und verhindert die Anmeldung unbefugter Benutzer. Weitere Informationen zur Sicherheit finden Sie in unserem Tutorial zur Konfiguration der SSH-Schlüssel-basierten Authentifizierung auf einem 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 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+

Sie sollten nun über einen öffentlichen und einen privaten Schlüssel verfügen, mit denen Sie sich authentifizieren können. Im nächsten Schritt platzieren Sie den öffentlichen Schlüssel auf Ihrem Server, damit Sie sich mit der SSH-Schlüssel-basierten Authentifizierung anmelden können.


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


Der schnellste Weg, Ihren öffentlichen Schlüssel auf den Ubuntu-Host zu kopieren, ist die Verwendung des Dienstprogramms „ssh-copy-id“. Diese Methode wird dringend empfohlen, sofern verfügbar. Wenn Ihnen „ssh-copy-id“ auf Ihrem Client-Rechner nicht zur Verfügung steht, können Sie eine der beiden in diesem Abschnitt beschriebenen alternativen Methoden 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. Möglicherweise ist es auch auf Ihrem lokalen System verfügbar. Damit es funktioniert, benötigen Sie einen passwortbasierten SSH-Zugriff auf Ihren Server.
Um das Dienstprogramm zu verwenden, müssen Sie den Remote-Host angeben, mit dem Sie eine Verbindung herstellen möchten, und einfach das Benutzerkonto hinzufügen, auf das Sie per SSH-Passwort zugreifen können. Auf dieses Konto wird Ihr öffentlicher SSH-Schlüssel kopiert.


Die Syntax lautet:


$ ssh-copy-id username@remote_host

Möglicherweise wird die folgende Meldung angezeigt:


Output

The authenticity of host '111.111.11.111 (111.111.11.111)' 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 erkannt hat. Dies passiert höchstwahrscheinlich beim ersten Verbinden mit einem neuen Host. Geben Sie „yes“ ein und drücken Sie die EINGABETASTE, um fortzufahren.


Anschließend durchsucht das Dienstprogramm Ihr lokales Konto nach dem zuvor erstellten Schlüssel id_rsa.pub. Sobald der Schlüssel gefunden ist, werden Sie nach dem Kennwort für das Konto des Remotebenutzers gefragt:


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@111.111.11.111's password:

Geben Sie das Passwort ein (beachten Sie, dass Ihre Eingabe aus Sicherheitsgründen nicht angezeigt wird) und drücken Sie die Eingabetaste. Das Dienstprogramm verbindet sich mit dem Konto auf dem Remote-Host unter Verwendung des von Ihnen angegebenen Passworts. Anschließend kopiert es den Inhalt Ihres Schlüssels ~/.ssh/id_rsa.pub in eine Datei mit dem Namen authorized_keys im Home-Verzeichnis ~/.ssh des Remote-Kontos.


Danach sollten Sie die folgende Ausgabe sehen:


Output

Number of key(s) added: 1

Logging into the machine, with: "ssh 'username@111.111.11.111'"
and check to make sure that only the key you wanted was added.

An diesem Punkt des Prozesses wurde Ihr id_rsa.pub-Schlüssel auf das Remote-Konto hochgeladen.

Kopieren des öffentlichen Schlüssels mit SSH

Wenn Sie die SSH-Kopier-ID nicht zur Verfügung haben, aber über einen passwortbasierten SSH-Zugriff auf ein Konto auf Ihrem Server verfügen, können Sie Ihre Schlüssel mit einer herkömmlichen SSH-Methode hochladen.

Dies erreichen wir, indem wir mit dem Befehl „cat“ den Inhalt des öffentlichen SSH-Schlüssels auf unserem lokalen Rechner auslesen und diesen über eine SSH-Verbindung an den Remote-Server weiterleiten. Andererseits können wir sicherstellen, dass das Verzeichnis ~/.ssh unter dem von uns verwendeten Konto vorhanden ist, und den weitergeleiteten Inhalt anschließend in eine Datei namens authorized_keys in diesem Verzeichnis ausgeben.

Wir verwenden das Weiterleitungssymbol >>, 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 && cat >> ~/.ssh/authorized_keys"

Möglicherweise wird die folgende Meldung angezeigt:

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' 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 passiert beim ersten Verbinden mit einem neuen Host. Geben Sie „yes“ ein und drücken Sie die EINGABETASTE, um fortzufahren.

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

Output

username@111.111.11.111's password:

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

Öffentlichen Schlüssel manuell kopieren

Wenn Ihnen kein passwortbasierter SSH-Zugriff auf Ihren Server zur Verfügung steht, müssen Sie den obigen Vorgang manuell durchführen.

Wir hängen den Inhalt Ihrer Datei id_rsa.pub manuell an die Datei ~/.ssh/authorized_keys auf Ihrem Remotecomputer an.

Um den Inhalt Ihres Schlüssels id_rsa.pub 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:


Output

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle
7Q+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 Ihnen zur Verfügung stehenden Methode auf Ihren Remote-Host zu.

Sobald Sie Zugriff auf Ihr Konto auf dem Remote-Server haben, stellen Sie sicher, dass das Verzeichnis ~/.ssh vorhanden ist. Der Befehl erstellt das Verzeichnis bei Bedarf, oder er führt keine Aktion aus, 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 am Ende der Datei authorized_keys hinzufügen und sie bei Bedarf mit diesem Befehl erstellen:


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

echo public_key_string >> ~/.ssh/authorized_keys

Wir können jetzt versuchen, mit einer passwortlosen Authentifizierung auf unseren Ubuntu-Server zuzugreifen.

Schritt 3 – Authentifizierung beim Ubuntu-Server mit SSH-Schlüsseln

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

Der grundlegende Vorgang ist derselbe wie beim letzten Mal, als wir es verwendet haben:

$ 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:

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' 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

Wenn dies der Fall ist, bedeutet dies, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Geben Sie „yes“ ein und drücken Sie die EINGABETASTE, um fortzufahren.


Wenn Sie für Ihren privaten Schlüssel keine Passphrase angegeben haben, werden Sie sofort angemeldet. Wenn Sie bei der Erstellung des privaten Schlüssels eine Passphrase angegeben haben, werden Sie jetzt aufgefordert, diese einzugeben (beachten Sie, dass Ihre Tastatureingaben aus Sicherheitsgründen nicht in der Terminalsitzung angezeigt werden). Nach der Authentifizierung sollte sich eine neue Shell-Sitzung mit dem konfigurierten Konto auf dem Ubuntu-Server öffnen.


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 per SSH ohne Passwort bei Ihrem Konto anmelden konnten, haben Sie die SSH-Schlüssel-basierte Authentifizierung für Ihr Konto erfolgreich konfiguriert. Ihr passwortbasierter 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ü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-Berechtigungen konfiguriert haben. Dieser Schritt sperrt passwortbasierte Anmeldungen, daher ist es wichtig, 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-Berechtigungen. Öffnen Sie anschließend die Konfigurationsdatei des SSH-Daemons:

sudo nano /etc/ssh/sshd_config

Suchen Sie in der Datei nach der Anweisung PasswordAuthentication. Diese ist möglicherweise auskommentiert. Entfernen Sie die Kommentarzeichen und setzen Sie den Wert auf „no“. Dadurch wird die Anmeldung per SSH mit Kontokennwörtern deaktiviert:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Speichern und schließen Sie die Datei, wenn Sie fertig sind, indem Sie STRG + X drücken, dann Y, um das Speichern der Datei zu bestätigen, und schließlich die EINGABETASTE, um nano zu beenden. Um diese Änderungen tatsächlich zu implementieren, müssen wir den SSHD-Dienst 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.


Abschluss


Nach Abschluss des Lernprogramms sollte auf Ihrem Server nun eine SSH-Schlüssel-basierte Authentifizierung konfiguriert sein, die Ihnen die Anmeldung ohne Angabe eines Kontokennworts ermöglicht.