SSH (Secure Shell) ist ein kryptografisch gesichertes Protokoll, das zur Verwaltung und Kommunikation mit Servern verwendet wird. Wenn Sie mit einem Ubuntu-Server arbeiten, werden Sie wahrscheinlich die meiste Zeit in einer Terminalsitzung verbringen, die über SSH mit Ihrem Server verbunden ist.
In dieser Anleitung werden wir uns auf die Einrichtung von SSH-Schlüsseln für eine Ubuntu 22.04-Installation konzentrieren. SSH-Schlüssel bieten eine sichere Möglichkeit, sich bei Ihrem Server anzumelden und werden für alle Benutzer empfohlen.
Schritt 1 – Erstellen des Schlüsselpaars
Der erste Schritt besteht darin, ein Schlüsselpaar auf dem Rechner zu erstellen:
ssh-keygen
Aktuelle Versionen von ssh-keygen erzeugen standardmäßig ein 3072-Bit-RSA-Schlüsselpaar, das für die meisten Anwendungsfälle sicher genug ist (Sie können optional die Option -b 4096 angeben, um einen größeren 4096-Bit-Schlüssel zu erzeugen).
Nach der Eingabe des Befehls sollten Sie die folgende Ausgabe sehen:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/your_username/.ssh/id_rsa):
Drücken Sie die Eingabetaste, 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:
/home/your_username/.ssh/id_rsa already exists.
Overwrite (y/n)?
Wenn Sie sich für das Überschreiben des Schlüssels auf der Festplatte entscheiden, 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 Aufforderung sehen:
Enter passphrase (empty for no passphrase):
Hier können Sie optional eine sichere Passphrase eingeben, was sehr empfehlenswert ist. Eine Passphrase ist ein Passwort, welches bei der Nutzung des Schlüssels abgefragt wird. Es bietet eine zusätzliche Sicherheitsebene.
Sie sollten dann eine ähnliche Ausgabe wie die folgende sehen:
Your identification has been saved in /home/your_username/.ssh/id_rsa
Your public key has been saved in /home/your_username/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:8STVn6r5nq+ABwWRlnsDaf0Ailrv4K6f5CTrEKREmyB username@hostname
The key's randomart image is:
+---[RSA 3072]----+
|+o. ++o |
|oA . +.. |
| o .+ |
|+ .. . |
|o .o.A. . |
| . o .Xo. o |
|o.=. o .= + |
|oO.+ . = o |
|*=*.o oo=o. |
+----[SHA256]-----+
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 abzulegen, damit Sie sich mit der SSH-Schlüssel-Authentifizierung anmelden können.
Schritt 2 – Kopieren des öffentlichen Schlüssels auf Ihren Ubuntu-Server
Der schnellste Weg, Ihren öffentlichen Schlüssel auf einen Ubuntu-Host zu kopieren, ist die Verwendung des Dienstprogramms ssh-copy-id. Aufgrund seiner Einfachheit ist diese Methode sehr empfehlenswert, sofern verfügbar natürlich. Wenn Ihnen ssh-copy-id auf Ihrem Client-Rechner nicht zur Verfügung steht, können Sie eine der beiden alternativen Methoden verwenden, die in diesem Abschnitt beschrieben werden (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 dürfte. Damit diese Methode funktioniert, müssen Sie bereits über einen passwortbasierten SSH-Zugang zu Ihrem Server verfügen.
Um das Tool zu verwenden, geben Sie den entfernten Host an, zu dem Sie eine Verbindung herstellen möchten, sowie das Benutzerkonto, zu dem Sie passwortbasierten SSH-Zugang haben. Dies ist das Konto, auf das Ihr öffentlicher SSH-Schlüssel kopiert wird.
Dazu verwenden wir folgenden Befehl:
ssh-copy-id username@remote_host
Folgende Meldung wird ausgegeben:
The authenticity of host '130.5.7.121 (130.5.7.121)' can't be established.
ECDSA key fingerprint is ea:ad:e4:A7:77:ff:13:24:e2:25:00:da:6e:d1:12:ae.
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 „yes“ 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 Passwort für das Konto des entfernten Benutzers einzugeben:
/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@130.5.7.121's password:
Geben Sie das Passwort ein (Ihre Eingabe wird aus Sicherheitsgründen nicht angezeigt) und drücken Sie ENTER. Das Dienstprogramm verbindet sich mit dem Konto auf dem entfernten Host unter Verwendung des von Ihnen angegebenen Passworts. Es kopiert dann den Inhalt Ihres ~/.ssh/id_rsa.pub-Schlüssels in die Datei authorized_keys im Home-Verzeichnis ~/.ssh des entfernten Kontos.
Sie sollten die folgende Ausgabe sehen:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@130.5.7.121'"
and check to make sure that only the key(s) you wanted were added.
Jetzt ist Ihr Schlüssel id_rsa.pub auf das entfernte Konto hochgeladen worden. Sie können nun mit Schritt 3 fortfahren.
Kopieren des öffentlichen Schlüssels mit SSH
Wenn der Befehl ssh-copy-id nicht verfügbar ist, aber einen passwortbasierten SSH-Zugang zu einem Konto auf Ihrem Server haben, können Sie Ihre Schlüssel mit einer herkömmlichen SSH-Methode hochladen.
Dazu lesen wir mit dem Befehl cat den Inhalt des öffentlichen SSH-Schlüssels auf unserem lokalen Computer und leiten ihn über eine SSH-Verbindung an den entfernten Server weiter.
Auf der anderen Seite können wir sicherstellen, dass das Verzeichnis ~/.ssh unter dem von uns verwendeten Konto existiert und die richtigen Berechtigungen hat.
Dann können wir den Inhalt, den wir über die Pipeline übertragen haben, in eine Datei namens authorized_keys innerhalb dieses Verzeichnisses ausgeben. Wir werden das Umleitungssymbol >> verwenden, 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 wie folgt 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"
Es folgt folgende Ausgabe:
The authenticity of host '130.5.7.121 (130.5.7.121)' can't be established.
ECDSA key fingerprint is ea:ad:e4:A7:77:ff:13:24:e2:25:00:da:6e:d1:12:ae.
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 „yes“ ein und drücken Sie ENTER, um fortzufahren.
Anschließend sollten Sie aufgefordert werden, das Kennwort für das entfernte Benutzerkonto einzugeben:
username@130.5.7.121's password:
Nachdem Sie Ihr Passwort eingegeben haben, wird der Inhalt Ihres Schlüssels id_rsa.pub an das Ende der Datei authorized_keys des Benutzerkontos der Gegenstelle kopiert. Wenn dies erfolgreich war, fahren Sie mit Schritt 3 fort.
Manuelles Kopieren des öffentlichen Schlüssels
Wenn Sie keinen passwortbasierten SSH-Zugang zu Ihrem Server haben, müssen Sie den obigen Prozess manuell durchführen.
Wir fügen den Inhalt Ihrer Datei id_rsa.pub manuell an die Datei ~/.ssh/authorized_keys auf Ihrem entfernten Rechner an.
Um den Inhalt Ihres id_rsa.pub-Schlüssels anzuzeigen, geben Sie Folgendes auf Ihrem lokalen Computer ein:
cat ~/.ssh/id_rsa.pub
Sie sehen den Inhalt des Schlüssels, der etwa so aussehen sollte:
ssh-rsa AAAAB4NzaC2yc2EAAAADAQABAAABgQC0YsVakZH8GBkHFBYmg8eeJX5LrFH7y8PHmLJDMGYvdnKSoASzo5zKKgzTVveEe82wv8N6IY3eT3fZHyYEUboUh8fhcU/zYZ9FinLBgOCsJS8oektjbN7O46tA0/nHnq0e1vUYu0fm68HF/mIci9QXNOXWuogX0CRsd9mb3yan1PujQye5sMwV2oEUg5vl3MPSkmYZfN86B/8zALKcyKTTXDkpxyaWPu/XOeUf2RqDWL2cwFzgsAJ3xm3DjREC3HuqclgHTipNmMDkLaY9/WJzTcGIV3VHJbA0pEnZhWWOZgQGyCqA213gSbJBz9M+ho5RBVroENM4Cjb9z/94Oqx9OPBY4QWKxxYa9grZjKVS8PqiFAUjbaqcSnu6jsl01JW90AmmKiPIqYC5jk8ekye+F7e+Ikak/c2bADlpn2lJKntEqHZYfVbArV8HAkIQAcZNITSAw6oL3LLtGX7FxWhBotDU8+/CSwlK+EaupoTymPNhDdo0NhFmLHWhAxthJat= demo@host
Nun greifen Sie mit der Ihnen zur Verfügung stehenden Methode auf Ihren entfernten Host zu.
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 erforderlich, oder tut nichts, wenn es bereits existiert:
mkdir -p ~/.ssh
Nun können Sie die Datei authorized_keys in diesem Verzeichnis erstellen oder ändern. Mit diesem Befehl können Sie den Inhalt Ihrer Datei id_rsa.pub an das Ende der Datei authorized_keys anfügen und sie gegebenenfalls erstellen:
echo public-key >> ~/.ssh/authorized_keys
Ersetzen Sie public-key im obigen Befehl durch die Ausgabe des Befehls cat ~/.ssh/id_rsa.pub, den Sie auf Ihrem lokalen System ausgeführt haben. Er sollte mit ssh-rsa AAAA…. beginnen.
Zum Schluss stellen wir sicher, dass das Verzeichnis ~/.ssh und die Datei authorized_keys mit den entsprechenden Berechtigungen versehen sind:
chmod -R go= ~/.ssh
Dadurch werden rekursiv alle „Gruppen“- und „Andere“-Berechtigungen für das Verzeichnis ~/.ssh/ entfernt.
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 username:username ~/.ssh
In diesem Beispiel heißt unser Benutzer username. Sie sollten den entsprechenden Benutzernamen im obigen Befehl ersetzen.
Wir können nun die passwortlose Authentifizierung mit unserem Ubuntu-Server versuchen.
Schritt 3 – Authentifizierung bei Ihrem Ubuntu-Server mit SSH-Schlüsseln
Wenn Sie eine der Methoden erfolgreich abgeschlossen haben, sollten Sie in der Lage sein, sich beim entfernten Host anzumelden, ohne das Passwort des entfernten Kontos anzugeben.
Der grundlegende Vorgang ist derselbe:
ssh username@remote_host
Wenn Sie zum ersten Mal eine Verbindung zu diesem Host herstellen (wenn Sie z.B. die letzte Methode oben verwendet haben), sehen Sie möglicherweise etwas wie das Folgende:
The authenticity of host '130.5.7.121 (130.5.7.121)' can't be established.
ECDSA key fingerprint is ea:ad:e4:A7:77:ff:13:24:e2:25:00:da:6e:d1:12:ae.
Are you sure you want to continue connecting (yes/no)? yes
Das bedeutet, dass Ihr lokaler Computer den entfernten 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 des Schlüssels eine Passphrase für den privaten Schlüssel angegeben haben, werden Sie jetzt aufgefordert, diese einzugeben (beachten Sie, dass Ihre Tastenanschläge aus Sicherheitsgründen nicht in der Terminalsitzung angezeigt werden). Nach der Authentifizierung sollte sich für Sie eine neue Shell-Sitzung mit dem konfigurierten Konto auf dem Ubuntu-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 Passwortauthentifizierung deaktivieren.
Schritt 4 – Deaktivieren der 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 weiterhin für Brute-Force-Angriffe anfällig ist.
Bevor Sie die Schritte in diesem Abschnitt ausführen, vergewissern Sie sich, 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. Mit diesem Schritt werden passwortbasierte Anmeldungen gesperrt, so dass Sie unbedingt sicherstellen müssen, dass Sie weiterhin administrativen Zugriff erlangen können.
Sobald Sie sich vergewissert haben, dass Ihr entferntes Konto über administrative Rechte verfügt, melden Sie sich mit SSH-Schlüsseln bei Ihrem entfernten Server an, entweder als root oder mit einem Konto mit sudo-Rechten. Öffnen Sie dann die Konfigurationsdatei des SSH-Dienstes:
sudo nano /etc/ssh/sshd_config
Suchen Sie in der Datei nach einer Direktive namens PasswordAuthentication. Diese Zeile kann mit einem # am Anfang der Zeile auskommentiert sein. Heben Sie die Auskommentierung der Zeile auf, indem Sie das # entfernen, und setzen Sie den Wert auf no. Dadurch wird die Möglichkeit, sich über SSH mit Kontopasswörtern anzumelden, deaktiviert:
. . .
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 ENTER, um nano zu beenden. Um diese Änderungen tatsächlich zu aktivieren, 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 korrekt funktioniert, bevor Sie Ihre aktuelle Sitzung schließen:
ssh username@remote_host
Sobald Sie sich vergewissert haben, dass Ihr SSH-Dienst ordnungsgemäß funktioniert, können Sie alle laufenden Serversitzungen sicher schließen.
Der SSH-Dienst auf Ihrem Ubuntu-Server reagiert jetzt nur noch auf die Authentifizierung mit SSH-Schlüsseln. Passwortbasierte Anmeldungen wurden deaktiviert.
Fazit
Sie sollten nun eine SSH-Schlüssel-basierte Authentifizierung auf Ihrem Server konfiguriert haben, so dass Sie sich ohne Angabe eines Kontopassworts anmelden können.