Wenn Sie einen Ubuntu-Server per SSH administrieren, muss der öffentliche Schlüssel bereit sein, bevor Sie die Passwortauthentifizierung angehen. Genau diesen Punkt sehe ich allzu oft falsch verstanden: Wir härten die Authentifizierung ab. sshdWir laden den Dienst neu und stellen dann fest, dass der Schlüssel nie richtig getestet wurde.
In diesem Leitfaden beginnen wir mit einem Schlüssel ed25519Wir installieren den öffentlichen Schlüssel auf dem Server, öffnen eine zweite Sitzung zum Testen und deaktivieren erst dann die Passwörter. Das dauert nicht länger und verhindert, dass Sie sich selbst aussperren.

Erstellen Sie einen SSH-Schlüssel ed25519 auf Ihrem Computer.
Generieren Sie auf Ihrem lokalen Rechner einen ed25519-Schlüssel. Dies ist das Format, das ich heutzutage für die typische SSH-Administration wählen würde.
ssh-keygen -t ed25519 -a 100 -C "admin@post"
Der Befehl fragt Sie, wo der Schlüssel gespeichert werden soll. Falls Sie noch keinen eigenen Schlüssel besitzen, können Sie den vorgeschlagenen Pfad beibehalten:
~/.ssh/id_ed25519
Fügen Sie eine Passphrase hinzu. Auf einem Laptop oder Computer, der das Büro verlässt, sollte der private Schlüssel niemals ungeschützt bleiben. Die Passphrase schützt den Schlüssel, falls die Datei kopiert oder das System kompromittiert wird.
Überprüfen Sie als Nächstes, ob beide Dateien vorhanden sind:
ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
Die Datei ohne Erweiterung .pub ist der private Schlüssel. Er darf nicht an den Server gesendet, in ein Ticket kopiert oder weitergegeben werden. Die Datei .pub ist der öffentliche Schlüssel, den Sie unter Ubuntu installieren werden.
Installieren Sie den öffentlichen Schlüssel auf Ubuntu
Falls Sie noch über einen Passwortzugriff verfügen, ist die einfachste Methode folgende: ssh-copy-id :
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
Ersetzen Benutzer über das Ziel-SSH-Konto und Server per IP-Adresse oder Name IN. Der Befehl fügt Ihren öffentlichen Schlüssel hinzu in ~/.ssh/authorized_keys serverseitig.
Wenn ssh-copy-id ist nicht verfügbar, Sie können es manuell über eine bestehende SSH-Sitzung durchführen:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Fügen Sie eine einzelne Zeile ein: den gesamten Inhalt Ihrer Datei id_ed25519.pubFügen Sie niemals den privaten Schlüssel ein. Wenn Sie sich nicht sicher sind, beginnt die öffentliche Datei normalerweise mit ssh-ed25519.
Führen Sie einen Test in einer zweiten Sitzung durch, bevor Sie die alte Sitzung schließen.
Schließen Sie Ihre aktuelle SSH-Sitzung nicht. Öffnen Sie ein zweites Terminal und testen Sie die Verbindung mit dem Schlüssel:
ssh -i ~/.ssh/id_ed25519 user@server
Wenn Sie ohne Kontopasswort auf den Server zugreifen, funktioniert der Schlüssel. Falls die Verbindung weiterhin nach dem Benutzerpasswort fragt, überprüfen Sie zuerst die Berechtigungen:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
Unter Ubuntu sollten Sie auch die SSH-Protokolle überprüfen, falls der Schlüssel abgelehnt wird:
sudo journalctl -u ssh -n 80 --no-pager
Ein falscher Ordnerbesitzer, ein über mehrere Zeilen eingefügter Schlüssel oder ein anderes Zielkonto reichen aus, um die Authentifizierung zu blockieren. Ändern Sie die SSH-Konfiguration erst, nachdem dieser Schritt abgeschlossen ist.
Bereiten Sie sshd vor, bevor Sie Passwörter deaktivieren.
Bevor Sie die Konfiguration ändern, sichern Sie die Hauptdatei:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Überprüfen Sie als Nächstes, ob Dateien vorhanden sind in /etc/ssh/sshd_config.d/ Die Authentifizierung per Schlüssel oder Passwort ist bereits definiert:
sudo grep -R "^PubkeyAuthentication|^PasswordAuthentication" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf 2>/dev/null
Unter Ubuntu ziehe ich es vor, eine separate Datei zu erstellen, anstatt zehn Zeilen mitten in der Hauptdatei zu ändern:
sudo nano /etc/ssh/sshd_config.d/99-disable-password.conf
Hinzufügen:
PubkeyAuthentication ja
Passwort-Authentifizierungsnr
Vor dem Neuladen von SSH sollte die Syntax überprüft werden. Dies ist auf einem Remote-Server nicht verhandelbar.
sudo /usr/sbin/sshd -t
Wenn der Befehl keine Ausgabe liefert, ist die Syntax korrekt. Falls ein Fehler angezeigt wird, korrigieren Sie ihn vor dem Neuladen.
SSH neu laden, ohne den Zugriff zu unterbrechen
Sobald die Syntax überprüft wurde, laden Sie den Dienst neu:
sudo systemctl reload ssh
sudo systemctl status ssh --no-pager
Lassen Sie die erste Sitzung geöffnet. Testen Sie in einem zweiten Terminal die schlüsselbasierte Verbindung erneut:
ssh -i ~/.ssh/id_ed25519 user@server
Testen Sie außerdem, ob eine schlüssellose Verbindung fehlschlägt, falls Sie über ein Testkonto oder einen Rechner verfügen, auf dem der Schlüssel nicht geladen ist. Ziel ist es, die tatsächliche Funktionsweise zu überprüfen und nicht nur eine Konfigurationszeile auszulesen.
Wenn Sie SSH unter Ubuntu verwenden, sollten Sie die Anleitung griffbereit haben. Neustart von SSH auf UbuntuUnd falls Sie eine lokale Firewall verwenden, überprüfen Sie Ihre Regeln anhand des Artikels auf UFW vor dem Öffnen eines Servers.
Die Kontrollen, die den Lockdown verhindern
- Der private Schlüssel verbleibt ausschließlich auf Ihrem Computer;
- Der öffentliche Schlüssel befindet sich tatsächlich in
~/.ssh/authorized_keysder richtige Benutzer; - Die Rechte sind korrekt.
~/.sshUndautorisierte_Schlüssel; - Eine zweite SSH-Sitzung pro Schlüssel funktioniert vor jeder Unterbrechung;
sudo /usr/sbin/sshd -tgibt keinen Fehler zurück;- Die Firewall lässt den korrekten SSH-Port weiterhin zu.
Wenn Sie nach einer Änderung den SSH-Zugriff verlieren, müssen Sie die Wiederherstellungskonsole, KVM, den Zugriff über Ihren Cloud-Anbieter oder den Rettungsmodus verwenden. Diese Methode soll dies verhindern. Für eine umfassendere Reparatur können Sie auch die Anleitung unter [Link einfügen] konsultieren. eine saubere Neuinstallation von SSH auf Ubuntu.
Die offizielle Dokumentation dazu bietet Ubuntu auf einer Webseite an. OpenSSHServerReferenzseiten ssh-keygen Und ssh-copy-id Sie beschreiben auch die hier verwendeten Optionen detailliert.