SSH ist das Werkzeug, mit dem ihr als Fachinformatiker*innen täglich auf Server zugreift. Statt eines Passworts, das abgefangen, erraten oder in Datenlecks gefunden werden kann, setzt ihr auf Schlüsselpaare – asymmetrische Kryptografie direkt in der Praxis. Dieser Block zeigt euch, wie ihr SSH richtig einrichtet und absichert.
Nach diesem Block könnt ihr:
- den Ablauf der SSH-Schlüsselauthentifizierung erklären (Challenge-Response)
- ein Ed25519-Schlüsselpaar generieren und auf einen Server übertragen
- die SSH-Client-Konfiguration (~/.ssh/config) nutzen
- einen SSH-Server mit sshd_config härten (Passwort-Login deaktivieren, Root-Login verbieten)
- TOFU (Trust on First Use) erklären und Host-Key-Warnungen richtig einordnen
SSH-Schlüsselauthentifizierung
SSH (Secure Shell) ist das wichtigste Beispiel für asymmetrische Authentifizierung im Alltag der IT. Statt Passwort: Schlüsselpaar.
Client Server
│ Hat: Private Key │ Hat: Public Key des Clients
│ │ (in ~/.ssh/authorized_keys)
│──── Verbindungsaufbau ────────────────►│
│ │ Schickt zufällige Challenge
│◄─── Challenge ─────────────────────────│
│ │
│ Signiert Challenge mit Private Key │
│──── Signatur ─────────────────────────►│
│ │ Verifiziert Signatur mit Public Key
│◄─── Zugang gewährt ────────────────────│ Stimmt → Authentifizierung erfolgr.
SSH-Schlüssel mit OpenSSH
# Ed25519-Schlüsselpaar generieren (empfohlen, modern)
ssh-keygen -t ed25519 -C "max.mustermann@techwerk.de"
# -t: Schlüsseltyp
# -C: Kommentar (zur Identifikation des Schlüssels)
# → Speichert nach ~/.ssh/id_ed25519 (privat) und ~/.ssh/id_ed25519.pub (öffentlich)
# Alternativ: RSA mit 4096 Bit
ssh-keygen -t rsa -b 4096 -C "max.mustermann@techwerk.de"
# Public Key auf Server kopieren
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server.techwerk.intern
# → Fügt Public Key zu ~/.ssh/authorized_keys auf dem Server hinzu
# Verbinden mit Schlüssel
ssh -i ~/.ssh/id_ed25519 user@server.techwerk.intern
# Schlüssel-Fingerprint anzeigen
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# Alle geladenen Schlüssel im SSH-Agent anzeigen
ssh-add -l
Probiert es selbst:
- Generiert ein Ed25519-Schlüsselpaar:
ssh-keygen -t ed25519 -C "test@schulung"- Schaut euch beide Dateien an:
cat ~/.ssh/id_ed25519undcat ~/.ssh/id_ed25519.pub– was fällt auf?- Prüft den Fingerprint:
ssh-keygen -l -f ~/.ssh/id_ed25519.pub- Falls ihr einen Testserver habt: Kopiert den Public Key mit
ssh-copy-idund verbindet euch – werdet ihr nach einem Passwort gefragt?- Erstellt einen Eintrag in
~/.ssh/configfür den Server und testet die Kurzform
Schlüssel absichern
# Schlüsseldatei darf nur für den Besitzer lesbar sein
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 700 ~/.ssh/
# Passwort eines bestehenden Keys ändern
ssh-keygen -p -f ~/.ssh/id_ed25519
Known Hosts – Serverkennzeichnung beim ersten Verbinden
Beim ersten SSH-Verbindungsaufbau zu einem neuen Server erscheint folgende Meldung:
The authenticity of host 'server.techwerk.intern (10.0.0.5)' can't be established.
ED25519 key fingerprint is SHA256:abc123xyz...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Was passiert hier: SSH kennt den Server noch nicht und fragt, ob dessen Host-Key vertrauenswürdig ist. Dieses Verfahren heißt TOFU (Trust on First Use) — beim ersten Verbinden wird vertraut, danach gespeichert.
Nach Bestätigung wird der Host-Key in ~/.ssh/known_hosts gespeichert:
# Inhalt der known_hosts anzeigen
cat ~/.ssh/known_hosts
# server.techwerk.intern ED25519 AAAA...
# Host-Key eines Servers prüfen (vor dem Verbinden, per sicherem Kanal vergleichen)
ssh-keyscan server.techwerk.intern 2>/dev/null | ssh-keygen -lf -
# Eintrag eines Servers aus known_hosts entfernen (z.B. nach Neuinstallation)
ssh-keygen -R server.techwerk.intern
Warum ist das sicherheitsrelevant? Ändert sich der Host-Key (z.B. nach Serverneubau oder bei einem MITM-Angriff), warnt SSH mit einer deutlichen Fehlermeldung:
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Diese Warnung nie einfach ignorieren und mit ssh-keygen -R wegklicken, ohne zu wissen warum. Ein geänderter Host-Key nach einer geplanten Serverneubau ist normal – ein geänderter Host-Key auf einem Server, den niemand angefasst hat, ist ein Alarmzeichen. Klärt das zuerst, bevor ihr die alte Zeile in known_hosts löscht.
Im Unternehmensumfeld werden Host-Keys über ein zentrales System verteilt, damit Mitarbeiter nicht bei jedem neuen Server blind bestätigen müssen.
SSH-Client-Konfiguration (~/.ssh/config)
Statt bei jedem Verbinden lange Befehle zu tippen, können Verbindungsprofile definiert werden:
# ~/.ssh/config
Host jumphost
HostName 203.0.113.10
User admin
IdentityFile ~/.ssh/id_ed25519
Port 2222
Host intern-server
HostName 10.0.0.50
User max
IdentityFile ~/.ssh/id_ed25519
ProxyJump jumphost # Verbindung über Jumphost weiterleiten
Host *
ServerAliveInterval 60 # Keepalive alle 60 Sekunden
ServerAliveCountMax 3
# Verbinden mit Profil-Alias (statt vollem Befehl)
ssh intern-server
# entspricht: ssh -i ~/.ssh/id_ed25519 -J admin@203.0.113.10:2222 max@10.0.0.50
Typischer Denkfehler
„Ich kann den Private Key auf den Server kopieren, damit er dort auch verfügbar ist.” – Nein! Der Private Key verlässt niemals den Client. Auf den Server kommt ausschließlich der Public Key (in
~/.ssh/authorized_keys). Wer seinen Private Key per E-Mail verschickt oder auf einen Server kopiert, hat das Prinzip der asymmetrischen Authentifizierung nicht verstanden – und gefährdet die Sicherheit aller Systeme, auf denen dieser Key hinterlegt ist.
SSH-Server absichern (sshd_config)
Schlüsselbasierte Authentifizierung nützt wenig, wenn Passwort-Login daneben noch aktiv ist. Ein Angreifer versucht beides – und der schwächere Weg gewinnt. Die Server-Konfiguration liegt unter /etc/ssh/sshd_config. Folgende Einstellungen sind für eine sichere SSH-Konfiguration essenziell:
# /etc/ssh/sshd_config – wichtige Sicherheitseinstellungen
# Passwort-Login deaktivieren – nur Schlüssel erlaubt
PasswordAuthentication no
# Root-Login verbieten – immer mit normalem User + sudo arbeiten
PermitRootLogin no
# Nur bestimmte Benutzer dürfen sich einloggen
AllowUsers max admin
# Leerlauf-Timeout (Verbindung wird nach 5 Minuten ohne Aktivität getrennt)
ClientAliveInterval 300
ClientAliveCountMax 1
# Maximale Fehlversuche beim Login
MaxAuthTries 3
# Konfiguration auf Syntaxfehler prüfen (vor dem Neustart!)
sudo sshd -t
# SSH-Dienst neu starten (Änderungen übernehmen)
sudo systemctl restart sshd
# SSH-Dienst-Status prüfen
sudo systemctl status sshd
Merke:
PasswordAuthentication noist eine der wichtigsten Härtungsmaßnahmen für SSH-Server. Passwort-Logins sind anfällig für Brute-Force — SSH-Schlüssel nicht. Stellt unbedingt sicher, dass euer Schlüssel in~/.ssh/authorized_keyseingetragen ist, bevor ihr die Sitzung schließt. Sonst sperrt ihr euch selbst aus.
Zusammenfassung
- SSH-Schlüsselauthentifizierung nutzt Challenge-Response: Der Server schickt eine Zufallszahl, der Client signiert sie mit seinem Private Key
- Ed25519 ist der empfohlene Schlüsseltyp – schnell, sicher, kurze Schlüssel
- Der Private Key bleibt immer auf dem Client; nur der Public Key kommt auf den Server
- TOFU (Trust on First Use): Beim ersten Verbinden wird dem Host-Key vertraut und gespeichert – ändert er sich später, ist das ein Warnsignal
- Härtung:
PasswordAuthentication noundPermitRootLogin noinsshd_configsind Pflicht
Selbsttest
- Beschreibt den Authentifizierungsablauf bei SSH in drei Schritten (Challenge → Signatur → Verifikation).
- Ein Kollege generiert ein Schlüsselpaar und schickt euch den Private Key per E-Mail. Was ist daran falsch?
- Nach einem Serverwechsel erscheint die Warnung „REMOTE HOST IDENTIFICATION HAS CHANGED”. Was prüft ihr, bevor ihr den Eintrag löscht?
Wie geht es weiter?
SSH-Schlüssel sind starke Authentifizierung – aber was, wenn der Private Key gestohlen wird? Ein zweiter, unabhängiger Faktor macht den Unterschied. Block 11 behandelt 2FA und MFA: von TOTP-Apps bis zu phishing-resistenten Hardware-Tokens.