Key-based SSH Login: Das ultimative Tutorial für passwortloses SSH

Melden

In der Welt der Linux-Administration und DevOps ist Sicherheit und Effizienz entscheidend. Die passwortlose Authentifizierung via SSH (Secure Shell) bietet nicht nur einen höheren Schutz gegen Brute-Force-Angriffe, sondern ist auch die Voraussetzung für Automatisierungen (z. B. mit Ansible, Jenkins oder GitHub Actions).

In diesem Tutorial lernst du, wie du ein SSH-Schlüsselpaar erstellst, es auf einen Server überträgst und den Login absicherst.


1. Funktionsweise verstehen

Das Verfahren basiert auf Asymmetrischer Kryptografie:

  • Private Key (Privater Schlüssel): Verbleibt sicher auf deinem lokalen Rechner. Gib ihn niemals weiter!
  • Public Key (Öffentlicher Schlüssel): Wird auf den Zielserver kopiert.
  • Der Clou: Der Server verschlüsselt eine Nachricht mit deinem Public Key, die nur du mit deinem Private Key entschlüsseln kannst. So beweist du deine Identität ohne Passwort.

Schritt 1: SSH-Schlüsselpaar lokal generieren

Öffne dein Terminal (Linux/macOS) oder die PowerShell (Windows). Wir verwenden den modernen ED25519-Algorithmus, da dieser schneller und sicherer als RSA ist.

ssh-keygen -t ed25519 -C "deine_email@example.com"

Was passiert jetzt?

  1. Dateipfad: Du wirst gefragt, wo der Schlüssel gespeichert werden soll (Standard: ~/.ssh/id_ed25519). Bestätige mit Enter.
  2. Passphrase: Du kannst optional ein Passwort für den Schlüssel selbst vergeben. Das erhöht die Sicherheit, falls dein lokaler Rechner gestohlen wird. Für volle Automatisierung lässt man dies oft leer.

Schritt 2: Den Public Key auf den Server übertragen

Nun müssen wir den öffentlichen Teil des Schlüssels auf den Remote-Server kopieren.

Methode A: Der einfache Weg (ssh-copy-id)

Dies ist das Standard-Tool unter Linux und macOS:

ssh-copy-id benutzername@server-ip

(Du wirst einmalig nach deinem aktuellen Passwort auf dem Server gefragt.)

Methode B: Der manuelle Weg (falls ssh-copy-id fehlt)

Falls das Tool nicht verfügbar ist, kannst du den Key manuell in die Datei ~/.ssh/authorized_keys auf dem Server einfügen:

cat ~/.ssh/id_ed25519.pub | ssh benutzername@server-ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Schritt 3: Den passwortlosen Login testen

Versuche nun, dich einzuloggen:

ssh benutzername@server-ip

Wenn alles korrekt konfiguriert wurde, wirst du sofort eingeloggt (oder nach der Passphrase deines Keys gefragt), ohne das Benutzerpasswort des Servers einzugeben.


Schritt 4: Sicherheit erhöhen (Passwort-Login deaktivieren)

Um die Sicherheit deines Servers massiv zu steigern, solltest du den normalen Passwort-Login komplett deaktivieren. So haben Hacker keine Chance mehr mit Brute-Force-Angriffen.

Achtung: Stelle sicher, dass der Key-Login funktioniert, bevor du diesen Schritt ausführst!

  1. Öffne die SSH-Konfigurationsdatei auf dem Server:

    sudo nano /etc/ssh/sshd_config
  2. Suche folgende Zeilen und ändere sie wie folgt ab:

    PasswordAuthentication no
    PubkeyAuthentication yes
    ChallengeResponseAuthentication no
  3. Speichere die Datei (Ctrl+O, Enter) und beende den Editor (Ctrl+X).

  4. Starte den SSH-Dienst neu, um die Änderungen zu übernehmen:

    sudo systemctl restart ssh

Bonus: Komfort durch die SSH-Config-Datei

Anstatt immer ssh benutzername@123.456.78.9 zu tippen, kannst du Shortcuts anlegen. Erstelle lokal die Datei ~/.ssh/config:

nano ~/.ssh/config

Füge folgenden Inhalt hinzu:

Host meinserver
    HostName 123.456.78.9
    User benutzername
    IdentityFile ~/.ssh/id_ed25519

Jetzt reicht ein einfaches:

ssh meinserver

Zusammenfassung für DevOps

  • Key-Generation: ssh-keygen -t ed25519
  • Transfer: ssh-copy-id
  • Hardening: PasswordAuthentication no in /etc/ssh/sshd_config
  • Vorteil: Sicherer Zugriff und bereit für Automatisierungstools wie Ansible oder Terraform.
0