Der erste Schritt beim Einrichten der SSH-Schlüssel besteht darin, ein Schlüsselpaar auf dem Client-Rechner (in der Regel einem Computer) zu erstellen:
$ ssh-keygenZunächst erstellt ssh-keygen ein 2048-Bit-RSA-Schlüsselpaar; dies ist für die meisten Anwendungsfälle ausreichend sicher.
Alternativ kann optional der Parameter -b 4096 übergeben werden, um einen größeren 4096-Bit-Schlüssel zu erstellen.
Nach 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. 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 eine zusätzliche Sicherheitsebene, um unbefugte Anmeldungen zu verhindern. Weitere Informationen zur Sicherheit finden Sie in unserem Tutorial „SSH-Schlüsselbasierte Authentifizierung auf einem Linux-Server konfigurieren“.
Anschließend sollte folgende Ausgabe angezeigt werden: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 verfügen nun über einen öffentlichen und einen privaten Schlüssel zur Authentifizierung. Im nächsten Schritt müssen Sie den öffentlichen Schlüssel auf Ihrem Server speichern, um sich per SSH-Schlüssel-basierter Authentifizierung anmelden zu können.
Am schnellsten kopieren Sie Ihren öffentlichen Schlüssel auf den Ubuntu-Host mit dem Dienstprogramm ssh-copy-id. Diese Methode ist dringend zu empfehlen, sofern verfügbar. Falls ssh-copy-id auf Ihrem Client-Rechner nicht installiert ist, können Sie eine der beiden in diesem Abschnitt beschriebenen Alternativmethoden verwenden (Kopieren per passwortbasiertem SSH oder manuelles Kopieren des Schlüssels).
Das Tool ssh-copy-id ist in vielen Betriebssystemen standardmäßig enthalten; möglicherweise ist es auch auf Ihrem lokalen System verfügbar. Für die Verwendung benötigen Sie einen passwortgeschützten SSH-Zugang zu Ihrem Server. Um das Dienstprogramm zu verwenden, müssen Sie den Remote-Host angeben, zu dem Sie eine Verbindung herstellen möchten, und einfach das Benutzerkonto hinzufügen, für das Sie über SSH-Zugriffsrechte verfügen. In dieses Konto wird Ihr öffentlicher SSH-Schlüssel kopiert.
Die Syntax lautet:
$ ssh-copy-id username@remote_hostMöglicherweise wird Ihnen 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)? yesDas bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkannt hat. Dies geschieht höchstwahrscheinlich beim ersten Verbindungsaufbau zu einem neuen Host. Geben Sie „ja“ ein und drücken Sie die Eingabetaste, um fortzufahren.
Als Nächstes durchsucht das Dienstprogramm Ihr lokales Konto nach dem zuvor erstellten Schlüssel id_rsa.pub. Sobald der Schlüssel gefunden wurde, werden Sie zur Eingabe des Passworts des Remote-Benutzerkontos 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@111.111.11.111's password:Geben Sie das Passwort ein (aus Sicherheitsgründen wird Ihre Eingabe nicht angezeigt) und drücken Sie die Eingabetaste. Das Programm stellt mit dem angegebenen Passwort eine Verbindung zum Konto auf dem Remote-Host her. Anschließend kopiert es den Inhalt Ihres Schlüssels ~/.ssh/id_rsa.pub in eine Datei namens authorized_keys im Home-Verzeichnis ~/.ssh des Remote-Kontos.
Anschließend sollte folgende Ausgabe angezeigt werden:
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.
Falls Sie die ssh-copy-id nicht zur Verfügung haben, aber über passwortbasierten SSH-Zugriff auf ein Konto auf Ihrem Server verfügen, können Sie Ihre Schlüssel mit einer herkömmlichen SSH-Methode hochladen.
Wir können dies erreichen, indem wir mit dem Befehl `cat` den Inhalt des öffentlichen SSH-Schlüssels auf unserem lokalen Computer auslesen und diesen über eine SSH-Verbindung an den Remote-Server weiterleiten. Gleichzeitig stellen wir sicher, dass das Verzeichnis `~/.ssh` unter dem verwendeten Benutzerkonto existiert und speichern den weitergeleiteten Inhalt in einer Datei namens `authorized_keys` innerhalb dieses Verzeichnisses.
Wir verwenden das >>-Weiterleitungssymbol, um den Inhalt anzuhängen, anstatt ihn zu überschreiben. Dadurch können wir Schlüssel hinzufügen, ohne bereits 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 Ihnen 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)? yesDas bedeutet, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Dies geschieht beim ersten Verbindungsaufbau zu einem neuen Host. Geben Sie „ja“ ein und drücken Sie die Eingabetaste, um fortzufahren.
Anschließend sollten Sie zur Eingabe des Passworts für das Remote-Benutzerkonto aufgefordert werden:
Output username@111.111.11.111's password:Nach Eingabe Ihres Passworts wird der Inhalt Ihres id_rsa.pub-Schlüssels an das Ende der authorized_keys-Datei des Benutzerkontos des Remote-Benutzers kopiert. Fahren Sie mit Schritt 3 fort, falls dies erfolgreich war.
Falls Sie keinen passwortbasierten SSH-Zugriff auf Ihren Server haben, müssen Sie den oben beschriebenen Vorgang manuell durchführen.
Wir werden den Inhalt Ihrer id_rsa.pub-Datei manuell an die Datei ~/.ssh/authorized_keys auf Ihrem Remote-Rechner anhängen.
Um den Inhalt Ihres id_rsa.pub-Schlüssels anzuzeigen, geben Sie Folgendes auf Ihrem lokalen Computer ein:
cat ~/.ssh/id_rsa.pubSie sehen dann den Inhalt des Schlüssels, der in etwa 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@testGreifen 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 existiert. Der Befehl erstellt das Verzeichnis gegebenenfalls; falls es bereits existiert, geschieht nichts.
mkdir -p ~/.sshSie können nun die Datei authorized_keys in diesem Verzeichnis erstellen oder bearbeiten. Fügen Sie den Inhalt Ihrer Datei id_rsa.pub am Ende der Datei authorized_keys hinzu und erstellen Sie diese gegebenenfalls mit folgendem Befehl:
Ersetzen Sie im folgenden Befehl die Zeichenfolge „public_key_string“ durch die Ausgabe des Befehls „cat ~/.ssh/id_rsa.pub“, den Sie auf Ihrem lokalen System ausgeführt haben. Diese muss mit „ssh-rsa AAAA…“ beginnen.
echo public_key_string >> ~/.ssh/authorized_keysWir können nun versuchen, mit passwortloser Authentifizierung auf unseren Ubuntu-Server zuzugreifen.
Wenn Sie eines der oben genannten Verfahren abgeschlossen haben, sollten Sie sich ohne das Passwort des Remote-Kontos beim Remote-Host anmelden können.
Der grundlegende Ablauf ist derselbe wie beim letzten Mal, als wir es verwendet haben:
$ ssh username@remote_hostWenn Sie sich zum ersten Mal mit diesem Host verbinden (wenn Sie die oben genannte Methode verwendet haben), sehen Sie möglicherweise Folgendes:
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)? yesWenn dies passiert, bedeutet es, dass Ihr lokaler Computer den Remote-Host nicht erkennt. Geben Sie „ja“ ein und drücken Sie anschließend die Eingabetaste, um fortzufahren.
Wenn Sie keine Passphrase für Ihren privaten Schlüssel angegeben haben, werden Sie sofort angemeldet. Wenn Sie bei der Erstellung des Schlüssels eine Passphrase festgelegt haben, werden Sie nun zur Eingabe aufgefordert (beachten Sie, dass Ihre Tastatureingaben aus Sicherheitsgründen nicht in der Terminal-Sitzung 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 im Folgenden, wie Sie Ihr System durch Deaktivierung der Passwortauthentifizierung weiter absichern können.
Wenn Sie sich ohne Passwort per SSH in Ihr Konto einloggen konnten, haben Sie die SSH-Schlüssel-basierte Authentifizierung erfolgreich konfiguriert. Ihr passwortbasierter Authentifizierungsmechanismus ist jedoch weiterhin aktiv, wodurch 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 – noch besser – dass Sie die SSH-Schlüssel-basierte Authentifizierung für ein Nicht-Root-Konto mit sudo-Berechtigungen auf diesem Server konfiguriert haben. Dieser Schritt verhindert passwortbasierte Anmeldungen. Daher ist es entscheidend, 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 auf Ihrem Remote-Server an, entweder als Root oder mit einem Konto mit sudo-Rechten. Öffnen Sie anschließend die Konfigurationsdatei des SSH-Daemons:
sudo nano /etc/ssh/sshd_configSuchen Sie in der Datei nach einer Direktive namens PasswordAuthentication. Diese ist möglicherweise auskommentiert. Entfernen Sie die Kommentarzeichen und setzen Sie den Wert auf „no“. Dadurch wird die Anmeldung per SSH mit Kontopasswö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 zum Bestätigen des Speicherns und schließlich die Eingabetaste, um nano zu beenden. Um diese Änderungen tatsächlich zu übernehmen, 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_hostSobald Sie Ihren SSH-Dienst verifiziert haben, können Sie alle laufenden Serversitzungen gefahrlos schließen.
Der SSH-Daemon auf Ihrem Ubuntu-Server reagiert nun ausschließlich auf SSH-Schlüssel. Die passwortbasierte Authentifizierung wurde erfolgreich deaktiviert.
Nach Abschluss des Tutorials sollte auf Ihrem Server nun die SSH-Schlüssel-basierte Authentifizierung konfiguriert sein, sodass Sie sich anmelden können, ohne ein Kontopasswort angeben zu müssen.