Schritt-für-Schritt-Anleitung zur sicheren SSH-Schlüsselauthentifizierung

Erschließen Sie sich eine überlegene Sicherheit für den Fernzugriff mit dieser umfassenden Schritt-für-Schritt-Anleitung zur SSH-Schlüsselauthentifizierung. Erfahren Sie, wie Sie robuste ED25519-Schlüsselpaare generieren, Ihren öffentlichen Schlüssel sicher verteilen und – was entscheidend ist – anfällige Passwortanmeldungen auf Ihrem Server deaktivieren. Dieses Tutorial bietet umsetzbare Befehle und wesentliche Best Practices, einschließlich der Verwendung von Passphrasen und der Schlüsselverwaltung, um sicherzustellen, dass Ihre SSH-Verbindungen sowohl bequem als auch hochsicher sind. Stärken Sie die Verteidigung Ihres Servers gegen Brute-Force-Angriffe noch heute.

29 Aufrufe

Schritt-für-Schritt-Anleitung zur sicheren SSH-Schlüsselauthentifizierung

Secure Shell (SSH) ist das Rückgrat der Remote-Systemadministration und ermöglicht einen sicheren Zugriff auf Server über ein unsicheres Netzwerk. Obwohl die passwortbasierte Authentifizierung üblich ist, ist sie anfällig für Brute-Force-Angriffe und Credential-Stuffing. Die SSH-Schlüsselauthentifizierung bietet eine weitaus robustere und sicherere Alternative, bei der kryptografische Schlüsselpaare zur Überprüfung der Identität verwendet werden, ohne Passwörter zu übertragen.

Diese Anleitung führt Sie durch den gesamten Prozess der Einrichtung der sicheren SSH-Schlüsselauthentifizierung. Sie erfahren, wie Sie Ihr SSH-Schlüsselpaar generieren, Ihren öffentlichen Schlüssel sicher auf einem Remote-Server verteilen und vor allem, wie Sie die SSH-Konfiguration Ihres Servers härten, indem Sie weniger sichere Passwortanmeldungen deaktivieren. Durch die Befolgung dieser Schritte verbessern Sie die Sicherheit Ihres Remote-Zugriffs erheblich und machen Ihre Systeme widerstandsfähiger gegen gängige Angriffsvektoren.

Verständnis der SSH-Schlüsselauthentifizierung

Die SSH-Schlüsselauthentifizierung basiert auf einem Paar kryptografisch verknüpfter Schlüssel: einem privaten Schlüssel und einem öffentlichen Schlüssel.

  • Privater Schlüssel: Dieser Schlüssel muss geheim gehalten und auf Ihrem lokalen Rechner gesichert werden. Er ist wie ein hochkomplexes Passwort, das nur Sie besitzen.
  • Öffentlicher Schlüssel: Dieser Schlüssel kann frei geteilt werden und wird auf dem Remote-Server platziert, auf den Sie zugreifen möchten. Er wird vom Server verwendet, um Ihre Identität zu überprüfen.

Wenn Sie versuchen, eine Verbindung herzustellen, verwendet der Server Ihren öffentlichen Schlüssel, um Ihren lokalen Rechner herauszufordern. Ihr lokaler Rechner antwortet dann mithilfe seines privaten Schlüssels auf diese Herausforderung und beweist so Ihre Identität, ohne jemals den privaten Schlüssel über das Netzwerk zu senden. Diese Methode ist nicht nur sicherer, sondern auch bequemer, da Sie nach korrekter Einrichtung für jede Verbindung kein Passwort mehr eingeben müssen.

Schritt 1: Generieren Ihres SSH-Schlüsselpaars

Das Dienstprogramm ssh-keygen wird verwendet, um neue SSH-Schlüsselpaare zu erstellen. Es wird empfohlen, moderne, starke Algorithmen wie ED25519 zu verwenden.

Auswahl eines Schlüssentyps und einer Stärke

Obwohl RSA-Schlüssel immer noch weit verbreitet sind, bietet ED25519 hervorragende Sicherheit bei kürzeren Schlüssellängen und schnelleren Operationen. Für neue Setups wird ED25519 im Allgemeinen bevorzugt.

Generieren des Schlüsselpaars

Öffnen Sie auf Ihrem lokalen Rechner (Client) Ihr Terminal und führen Sie den folgenden Befehl aus:

ssh-keygen -t ed25519 -C "[email protected]"
  • -t ed25519: Gibt den Schlüsselausgangstyp als ED25519 an.
  • -C "[email protected]": Fügt dem öffentlichen Schlüssel einen Kommentar hinzu, der oft zur Identifizierung verwendet wird. Ersetzen Sie dies durch Ihre tatsächliche E-Mail-Adresse oder eine beschreibende Bezeichnung.

Der Befehl fordert Sie zur Eingabe eines Speicherorts für den Schlüssel und einer optionalen Passphrase auf.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/youruser/.ssh/id_ed25519
Your public key has been saved in /home/youruser/.ssh/id_ed25519.pub
The key fingerprint is: SHA256:...
The key's randomart image is: ...

Festlegen einer starken Passphrase (dringend empfohlen)

Wenn Sie dazu aufgefordert werden, legen Sie immer eine starke Passphrase für Ihren privaten Schlüssel fest. Diese Passphrase verschlüsselt Ihren privaten Schlüssel auf Ihrem lokalen Rechner und bietet eine zusätzliche Sicherheitsebene. Sollte Ihr privater Schlüssel in falsche Hände geraten, ist er ohne die Passphrase nutzlos. Sie können ssh-agent verwenden, um die wiederholte Eingabe der Passphrase zu vermeiden (siehe Schritt 4).

Speicherorte der Schlüsseldateien

Standardmäßig speichert ssh-keygen Ihren privaten Schlüssel in ~/.ssh/id_ed25519 und Ihren öffentlichen Schlüssel in ~/.ssh/id_ed25519.pub.

Berechtigungen für Ihren privaten Schlüssel

Es ist entscheidend, dass Ihre private Schlüsseldatei sehr strenge Berechtigungen hat. Nur der Besitzer sollte sie lesen dürfen. ssh-keygen stellt dies normalerweise korrekt ein, aber es ist gut, dies zu überprüfen:

chmod 600 ~/.ssh/id_ed25519

Schritt 2: Verteilen Ihres öffentlichen Schlüssels auf den Server

Nachdem Sie Ihr Schlüsselpaar generiert haben, muss Ihr öffentlicher Schlüssel auf den Remote-Server kopiert werden, auf den Sie zugreifen möchten. Er sollte in einer Datei namens authorized_keys im Verzeichnis ~/.ssh/ Ihres Benutzers auf dem Remote-Server abgelegt werden.

Methode 1: Verwendung von ssh-copy-id (Empfohlen)

ssh-copy-id ist die einfachste und sicherste Methode. Sie meldet sich beim Remote-Server an (unter Verwendung Ihres Passworts), erstellt das Verzeichnis ~/.ssh, falls es nicht existiert, setzt die korrekten Berechtigungen und hängt Ihren öffentlichen Schlüssel an ~/.ssh/authorized_keys an.

ssh-copy-id user@your_server_ip

Ersetzen Sie user durch Ihren Benutzernamen auf dem Remote-Server und your_server_ip durch die IP-Adresse oder den Hostnamen des Servers. Sie werden nach Ihrem Passwort auf dem Remote-Server gefragt.

Methode 2: Manuelles Kopieren

Wenn ssh-copy-id nicht verfügbar ist, können Sie den öffentlichen Schlüssel manuell kopieren.

  1. Kopieren Sie den Inhalt des öffentlichen Schlüssels von Ihrem lokalen Rechner:
    bash cat ~/.ssh/id_ed25519.pub
    Kopieren Sie die gesamte Ausgabe in Ihre Zwischenablage (sie beginnt mit ssh-ed25519 ...).

  2. Melden Sie sich mit Ihrem Passwort beim Remote-Server an:
    bash ssh user@your_server_ip

  3. Erstellen Sie das Verzeichnis ~/.ssh, falls es nicht existiert, und legen Sie die Berechtigungen fest:
    bash mkdir -p ~/.ssh chmod 700 ~/.ssh

  4. Fügen Sie Ihren öffentlichen Schlüssel an authorized_keys an:
    bash echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
    Stellen Sie sicher, dass Sie PASTE_YOUR_PUBLIC_KEY_HERE durch den tatsächlich kopierten Inhalt ersetzen. Die Verwendung von >> (anhängen) ist wichtig, um zu vermeiden, dass vorhandene Schlüssel überschrieben werden, falls welche existieren.

  5. Legen Sie die korrekten Berechtigungen für authorized_keys fest:
    bash chmod 600 ~/.ssh/authorized_keys

    • Warnung: Falsche Berechtigungen für ~/.ssh oder ~/.ssh/authorized_keys verhindern, dass die Schlüsselauthentifizierung funktioniert.

Schritt 3: Testen Ihrer SSH-Schlüsselauthentifizierung

Bevor Sie mit der Deaktivierung der Passwortauthentifizierung fortfahren, ist es absolut entscheidend zu überprüfen, ob die Schlüsselauthentifizierung korrekt funktioniert. Melden Sie sich vom Remote-Server ab, falls Sie von den Schritten zum manuellen Kopieren noch verbunden sind.

Versuchen Sie von Ihrem lokalen Rechner aus, sich ohne Angabe eines Passworts mit dem Server zu verbinden:

ssh user@your_server_ip
  • Wenn Sie eine Passphrase für Ihren privaten Schlüssel festgelegt haben, werden Sie zur Eingabe dieser Passphrase aufgefordert.
  • Wenn die Verbindung ohne Passworteingabe (nach der Passphrase, falls zutreffend) erfolgreich ist, funktioniert Ihre Schlüsselauthentifizierung. Sie sollten die Eingabeaufforderung des Remote-Servers sehen.

Fahren Sie NICHT mit Schritt 4 fort, wenn Sie sich nicht mit Ihrem SSH-Schlüssel anmelden können. Beheben Sie alle Probleme, bevor Sie die Passwortauthentifizierung deaktivieren, da Sie sonst Gefahr laufen, sich vom Server auszusperren.

Schritt 4: Sicherheit erhöhen – Deaktivieren der Passwortauthentifizierung

Sobald Sie bestätigt haben, dass die SSH-Schlüsselauthentifizierung funktioniert, können Sie die Anmeldung per Passwort auf Ihrem Server deaktivieren, um die Sicherheit erheblich zu verbessern. Dies verhindert Brute-Force-Angriffe auf Ihr Passwort und stellt sicher, dass nur Personen mit gültigen SSH-Schlüsseln auf den Server zugreifen können.

  1. Melden Sie sich mit Ihrem SSH-Schlüssel auf Ihrem Remote-Server an.
    bash ssh user@your_server_ip

  2. Bearbeiten Sie die Konfigurationsdatei des SSH-Daemons. Diese Datei befindet sich normalerweise unter /etc/ssh/sshd_config.
    bash sudo nano /etc/ssh/sshd_config
    (Sie können anstelle von nano auch vi oder Ihren bevorzugten Texteditor verwenden.)

  3. Suchen und ändern Sie die folgenden Direktiven:

    • Suchen Sie nach PasswordAuthentication und ändern Sie den Wert auf no.
      #PasswordAuthentication yes PasswordAuthentication no
      (Entkommentieren Sie die Zeile, falls sie mit # auskommentiert ist)

    • Suchen Sie nach ChallengeResponseAuthentication und ändern Sie den Wert auf no.
      #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no

    • (Optional, aber empfohlen) Ziehen Sie in Betracht, die direkte Anmeldung als Root über SSH zu deaktivieren, falls Sie nach der Anmeldung als regulärer Benutzer sudo verwenden möchten.
      PermitRootLogin no

    • (Optional) Ziehen Sie in Betracht, den Standard-SSH-Port von 22 auf einen nicht standardmäßigen hohen Port (z. B. 2222) zu ändern. Dies erhöht die Sicherheit gegen gezielte Angriffe nicht, kann aber die Störungen durch automatisierte Port-Scanner reduzieren.
      #Port 22 Port 2222
      Wenn Sie den Port ändern, denken Sie daran, ihn beim Verbindungsaufbau mit dem Flag -p anzugeben (z. B. ssh -p 2222 user@your_server_ip).

  4. Speichern Sie die Änderungen und verlassen Sie den Texteditor.

  5. Starten Sie den SSH-Dienst neu, um die neue Konfiguration zu übernehmen. Der Befehl variiert geringfügig je nach Betriebssystem (z. B. Ubuntu/Debian gegenüber CentOS/RHEL).

    • Systemd-basierte Systeme (die meisten modernen Linux-Distributionen):
      bash sudo systemctl restart sshd

    • Ältere SysVinit-basierte Systeme:
      bash sudo service ssh restart

  6. Öffnen Sie entscheidenderweise ein neues Terminalfenster (schließen Sie Ihre aktuell aktive SSH-Sitzung NICHT!) und versuchen Sie, sich mit Ihrem Schlüssel anzumelden. Dies testet die neue Konfiguration, ohne Sie auszusperren, falls etwas schiefgelaufen ist.

    bash ssh user@your_server_ip
    Wenn Sie den Port geändert haben:
    bash ssh -p 2222 user@your_server_ip

    Wenn die Verbindung erfolgreich ist, können Sie nun Ihre ursprüngliche SSH-Sitzung sicher schließen.

    Wenn die neue Anmeldung fehlschlägt, machen Sie die Änderungen in sshd_config sofort in Ihrer ursprünglichen, noch aktiven SSH-Sitzung rückgängig, starten Sie den SSH-Dienst erneut und überprüfen Sie die Situation erneut.

Best Practices und Tipps

  • Verwenden Sie immer eine starke Passphrase für Ihren privaten Schlüssel. Dies ist Ihre letzte Verteidigungslinie, falls Ihr privater Schlüssel kompromittiert wird.
  • Schützen Sie Ihren privaten Schlüssel. Teilen Sie ihn niemals und stellen Sie sicher, dass er sicher mit strengen Dateiberechtigungen (chmod 600 ~/.ssh/id_ed25519) gespeichert ist. Erwägen Sie Hardware-Sicherheitsmodule (HSMs) oder YubiKeys für ultimativen Schutz.
  • Verwenden Sie ssh-agent für mehr Komfort. ssh-agent ermöglicht es Ihnen, Ihren privaten Schlüssel (Ihre privaten Schlüssel) in den Speicher zu laden und Ihre Passphrase nur einmal pro Sitzung einzugeben, selbst bei mehreren SSH-Verbindungen. Fügen Sie Ihren Schlüssel mit ssh-add ~/.ssh/id_ed25519 dem Agenten hinzu.
  • Rotieren Sie Ihre SSH-Schlüssel regelmäßig. Generieren Sie periodisch neue Schlüsselpaare und entfernen Sie alte öffentliche Schlüssel von Ihren Servern, insbesondere wenn ein Teammitglied ausscheidet oder die Sicherheit eines Schlüssels als gefährdet angesehen wird.
  • Begrenzen Sie PermitRootLogin auf no oder prohibit-password. Es ist im Allgemeinen besser, sich als regulärer Benutzer anzumelden und sudo für administrative Aufgaben zu verwenden.
  • Konfigurieren Sie eine Firewall. Stellen Sie sicher, dass nur notwendige Ports (wie Ihr SSH-Port) für das Internet geöffnet sind. Tools wie ufw oder firewalld können dabei helfen.

Fazit

Indem Sie dieser Schritt-für-Schritt-Anleitung gefolgt sind, haben Sie die SSH-Schlüsselauthentifizierung für Ihren Remote-Server erfolgreich eingerichtet und abgesichert. Sie haben ein robustes kryptografisches Schlüsselpaar generiert, Ihren öffentlichen Schlüssel verteilt und vor allem die weniger sicheren passwortbasierten Anmeldungen deaktiviert. Dies erhöht die Sicherheit Ihres Servers erheblich und macht ihn widerstandsfähiger gegen gängige Hacking-Versuche.

Denken Sie immer daran, Ihren privaten Schlüssel und dessen Passphrase wachsam zu schützen, da dies nun das primäre Zugangscredential für Ihren Server ist. Übernehmen Sie diese Best Practices, um eine starke Sicherheitslage für all Ihre Remote-Zugriffsanforderungen aufrechtzuerhalten.