Post 1309
Unix

SSH-Login mit Public-Key-Authentifizierung einrichten

Passwortbasierter SSH-Login ist unsicher und umständlich. Public-Key-Authentifizierung ist sicherer, schneller und lässt sich in Skripten verwenden. Diese Anleitung zeigt den vollständigen Einrichtungsprozess für Debian/Ubuntu und macOS – inklusive Schlüsselsicherung.

Wie Public-Key-Authentifizierung funktioniert

Bei der Public-Key-Authentifizierung gibt es zwei Schlüssel: einen privaten (der niemals den eigenen Rechner verlässt) und einen öffentlichen (der auf dem Server hinterlegt wird). Beim Login beweist der Client dem Server, dass er den privaten Schlüssel besitzt – ohne ihn jemals zu übertragen. Der Server kann das mit dem hinterlegten Public Key verifizieren.

Schlüsselpaar generieren

Auf dem lokalen Rechner (Debian/Ubuntu oder macOS):

ssh-keygen -t ed25519 -C "kommentar@hostname"

Ed25519 ist der moderne Standard – sicherer und schneller als RSA. Für Systeme, die Ed25519 nicht unterstützen (sehr alte SSH-Versionen), alternativ RSA mit 4096 Bit:

ssh-keygen -t rsa -b 4096 -C "kommentar@hostname"

Der Befehl fragt nach dem Speicherort (Standard: ~/.ssh/id_ed25519 bzw. ~/.ssh/id_rsa) und einer optionalen Passphrase. Eine Passphrase schützt den privaten Schlüssel, falls er gestohlen wird – dringend empfohlen.

Public Key auf den Server übertragen – Debian/Ubuntu

Der einfachste Weg ist ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_rsa.pub username@servername

Das Kommando verbindet sich per Passwort, legt auf dem Server die Datei ~/.ssh/authorized_keys an (falls nicht vorhanden) und trägt den Public Key ein. Anschließend ist der passwortlose Login möglich:

ssh username@servername

Public Key auf den Server übertragen – macOS

Auf macOS ist ssh-copy-id nicht immer standardmäßig vorhanden (ältere macOS-Versionen). Alternativ:

# Schlüssel zum ssh-agent hinzufügen
ssh-add ~/.ssh/id_rsa

# Public Key manuell auf Server kopieren
cat ~/.ssh/id_rsa.pub | ssh servername -l username 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'

Der mkdir -p ~/.ssh stellt sicher, dass das Verzeichnis existiert. Das >> hängt den Schlüssel an – falls bereits andere Schlüssel in authorized_keys stehen, werden sie nicht überschrieben.

Berechtigungen auf dem Server prüfen

SSH ist bei Berechtigungen pingelig. Falsche Rechte führen dazu, dass der Key-Login schweigend fehlschlägt:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Das Home-Verzeichnis darf nicht group- oder world-writable sein (chmod 755 ~ oder restriktiver).

ssh-agent auf macOS dauerhaft konfigurieren

Auf macOS kann der ssh-agent so konfiguriert werden, dass er den Schlüssel beim Login automatisch lädt:

# ~/.ssh/config
Host *
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_ed25519

Mit UseKeychain yes wird die Passphrase im macOS-Schlüsselbund gespeichert – einmalig eingeben, danach automatisch entsperrt.

Private Key sichern mit rsync

SSH-Schlüssel sind wertvolle Credentials – ein Backup ist unverzichtbar. Mit rsync auf ein externes Laufwerk oder einen Backup-Server sichern:

# Public Key sichern
rsync -avz --delete --sparse ~/.ssh/id_rsa.pub /target/ssh-backup/

# Gesamtes .ssh-Verzeichnis sichern (inkl. privater Schlüssel!)
rsync -avz --delete --sparse ~/.ssh/ /Volumes/Backup/ssh-keys/

Das Backup des privaten Schlüssels muss verschlüsselt oder an einem physisch sicheren Ort gespeichert werden. Wer den privaten Schlüssel mit einer Passphrase geschützt hat, ist bei Verlust des Backups besser abgesichert.

Passwort-Login auf dem Server deaktivieren

Sobald der Key-Login funktioniert, sollte der Passwort-Login deaktiviert werden – das erhöht die Sicherheit erheblich:

# In /etc/ssh/sshd_config auf dem Server:
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# SSH-Dienst neu laden
sudo systemctl reload ssh

Wichtig: Vor dem Deaktivieren des Passwort-Logins sicherstellen, dass der Key-Login funktioniert – sonst ist man vom Server ausgesperrt.

Fazit

Public-Key-Authentifizierung ist Standard für jeden ernsthaften Serveradmin. Die Einrichtung dauert wenige Minuten, erhöht die Sicherheit massiv und macht den täglichen Umgang mit Servern komfortabler – kein Passwort eintippen, keine Brute-Force-Angriffe mehr. Mit einem regelmäßigen rsync-Backup des .ssh-Verzeichnisses sind die Schlüssel auch bei Systemwechsel sofort wieder verfügbar.