SSH Verbindungsaufbau: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
= SSH-Verbindungsaufbau = | = SSH-Verbindungsaufbau = | ||
| − | SSH baut eine Verbindung in drei | + | SSH baut eine Verbindung in drei Phasen auf: |
| + | * Verschlüsselter Kanal wird aufgebaut | ||
| + | * Nutzer wird authentifiziert | ||
| + | * Eigentliche Sitzung beginnt | ||
| − | '''Hinweis | + | '''Hinweis:''' Dieses Wissen hilft dir, Fehlermeldungen zu verstehen – du brauchst es nicht, um SSH zu benutzen. |
== Die drei Phasen im Überblick == | == Die drei Phasen im Überblick == | ||
| Zeile 12: | Zeile 15: | ||
== Phase 1: Transport Layer & Key Exchange == | == Phase 1: Transport Layer & Key Exchange == | ||
| − | |||
| − | |||
=== Begrüßung (Hello) === | === Begrüßung (Hello) === | ||
| − | + | * Client schickt dem Server, welche Verfahren er unterstützt | |
| + | * Server wählt passende Verfahren aus | ||
| + | * Server schickt seinen öffentlichen Host Key mit | ||
| − | + | === Host-Key-Prüfung === | |
| − | |||
| − | |||
| − | |||
| − | + | * Client empfängt den öffentlichen Host Key des Servers | |
| + | * SSH prüft: ''Ist das wirklich der richtige Server?'' | ||
| + | * Prüfung erfolgt anhand <code>~/.ssh/known_hosts</code> | ||
| + | * Beim ersten Verbindungsaufbau: SSH zeigt den Fingerprint an und fragt nach Bestätigung | ||
| + | * Nach Bestätigung: Public Key wird in <code>known_hosts</code> gespeichert | ||
| + | * Bei weiteren Verbindungen: SSH vergleicht automatisch | ||
| − | + | '''Warnung:''' <code>WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</code> | |
| − | + | * Der Server präsentiert einen anderen Key als beim letzten Mal | |
| − | + | * Mögliche Ursachen: Angriff oder Server neu aufgesetzt | |
| − | '''Warnung:''' | + | * Im Zweifel beim Administrator nachfragen |
=== Diffie-Hellman Key Exchange === | === Diffie-Hellman Key Exchange === | ||
| − | + | * Client und Server tauschen öffentliche Werte aus | |
| + | * Beide berechnen daraus unabhängig denselben Session Key | ||
| + | * Der Session Key wird nie übertragen | ||
| + | * Ein Lauscher kann den Key nicht ableiten | ||
| − | + | === Ab jetzt alles verschlüsselt === | |
| − | + | * Beide Seiten besitzen nun denselben Session Key | |
| + | * Ab jetzt ist die gesamte Kommunikation verschlüsselt | ||
| − | + | == Phase 2: User Authentication == | |
| − | |||
| − | |||
| − | |||
| − | + | * Server prüft: ''Wer will sich einloggen – und hat diese Person Berechtigung?'' | |
| + | * Sicherste Methode: '''Public-Key-Authentifizierung''' | ||
| − | + | Ablauf: | |
| + | # Client schickt seinen öffentlichen Schlüssel | ||
| + | # Server prüft, ob dieser in <code>~/.ssh/authorized_keys</code> steht | ||
| + | # Server schickt eine Challenge | ||
| + | # Client signiert sie mit seinem privaten Schlüssel | ||
| + | # Server prüft die Signatur → Erfolg | ||
| − | + | * Der private Schlüssel verlässt nie den eigenen Rechner | |
| + | * Sicherer als ein Passwort, weil die Signatur ohne privaten Schlüssel nicht reproduzierbar ist | ||
| − | + | == Phase 3: Session Phase == | |
| − | + | * Verbindung steht – die eigentliche Arbeit beginnt | |
| − | + | * SSH öffnet Channels für verschiedene Aufgaben: | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
{| class="wikitable" | {| class="wikitable" | ||
| Zeile 78: | Zeile 75: | ||
| <code>exec</code> || Einzelnen Befehl ausführen || <code>ssh user@server ls -la</code> | | <code>exec</code> || Einzelnen Befehl ausführen || <code>ssh user@server ls -la</code> | ||
|- | |- | ||
| − | | <code>subsystem sftp</code> || Dateiübertragung | + | | <code>subsystem sftp</code> || Dateiübertragung || <code>sftp user@server</code> |
|- | |- | ||
| <code>direct-tcpip</code> || Port-Forwarding / Tunnel || <code>ssh -L 8080:localhost:80 user@server</code> | | <code>direct-tcpip</code> || Port-Forwarding / Tunnel || <code>ssh -L 8080:localhost:80 user@server</code> | ||
|} | |} | ||
| − | Alle Daten | + | * Alle Daten sind verschlüsselt und integritätsgeschützt |
== Häufige Fehlermeldungen == | == Häufige Fehlermeldungen == | ||
| Zeile 91: | Zeile 88: | ||
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! | WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! | ||
| − | + | * Ursache: Host Key hat sich geändert (z. B. nach Neuinstallation) | |
| − | + | * Lösung: | |
| − | |||
ssh-keygen -R server.example.com | ssh-keygen -R server.example.com | ||
| Zeile 100: | Zeile 96: | ||
Permission denied (publickey). | Permission denied (publickey). | ||
| − | + | * Ursache: Public Key nicht in <code>~/.ssh/authorized_keys</code>, oder Berechtigungen falsch | |
| − | + | * Lösung: | |
| − | |||
ssh-copy-id user@server | ssh-copy-id user@server | ||
| − | |||
| − | |||
chmod 700 ~/.ssh | chmod 700 ~/.ssh | ||
chmod 600 ~/.ssh/authorized_keys | chmod 600 ~/.ssh/authorized_keys | ||
| Zeile 112: | Zeile 105: | ||
{| class="wikitable" | {| class="wikitable" | ||
| − | ! Kategorie !! | + | ! Kategorie !! Empfehlung !! Zweck |
|- | |- | ||
| − | | Key Exchange | + | | Key Exchange || <code>curve25519-sha256</code> || Session Key ableiten |
|- | |- | ||
| Host Key || <code>ssh-ed25519</code> || Server-Identität beweisen | | Host Key || <code>ssh-ed25519</code> || Server-Identität beweisen | ||
|- | |- | ||
| − | | | + | | Verschlüsselung || <code>aes256-gcm@openssh.com</code> || Datenverschlüsselung |
|- | |- | ||
| − | | | + | | Integrität || <code>hmac-sha2-256-etm</code> || Manipulation erkennen |
|- | |- | ||
| Client-Schlüssel || <code>ed25519</code> || User Authentication | | Client-Schlüssel || <code>ed25519</code> || User Authentication | ||
Version vom 14. April 2026, 14:28 Uhr
SSH-Verbindungsaufbau
SSH baut eine Verbindung in drei Phasen auf:
- Verschlüsselter Kanal wird aufgebaut
- Nutzer wird authentifiziert
- Eigentliche Sitzung beginnt
Hinweis: Dieses Wissen hilft dir, Fehlermeldungen zu verstehen – du brauchst es nicht, um SSH zu benutzen.
Die drei Phasen im Überblick
- Phase 1 – Transport Layer & Key Exchange: Client und Server einigen sich auf einen gemeinsamen, geheimen Schlüssel – ohne ihn jemals direkt zu übertragen.
- Phase 2 – User Authentication: Der Server prüft, ob der Client wirklich der ist, der er vorgibt zu sein.
- Phase 3 – Session Phase: Die eigentliche Arbeit beginnt – Befehle, Dateiübertragungen, Tunnel usw.
Phase 1: Transport Layer & Key Exchange
Begrüßung (Hello)
- Client schickt dem Server, welche Verfahren er unterstützt
- Server wählt passende Verfahren aus
- Server schickt seinen öffentlichen Host Key mit
Host-Key-Prüfung
- Client empfängt den öffentlichen Host Key des Servers
- SSH prüft: Ist das wirklich der richtige Server?
- Prüfung erfolgt anhand
~/.ssh/known_hosts - Beim ersten Verbindungsaufbau: SSH zeigt den Fingerprint an und fragt nach Bestätigung
- Nach Bestätigung: Public Key wird in
known_hostsgespeichert - Bei weiteren Verbindungen: SSH vergleicht automatisch
Warnung: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- Der Server präsentiert einen anderen Key als beim letzten Mal
- Mögliche Ursachen: Angriff oder Server neu aufgesetzt
- Im Zweifel beim Administrator nachfragen
Diffie-Hellman Key Exchange
- Client und Server tauschen öffentliche Werte aus
- Beide berechnen daraus unabhängig denselben Session Key
- Der Session Key wird nie übertragen
- Ein Lauscher kann den Key nicht ableiten
Ab jetzt alles verschlüsselt
- Beide Seiten besitzen nun denselben Session Key
- Ab jetzt ist die gesamte Kommunikation verschlüsselt
Phase 2: User Authentication
- Server prüft: Wer will sich einloggen – und hat diese Person Berechtigung?
- Sicherste Methode: Public-Key-Authentifizierung
Ablauf:
- Client schickt seinen öffentlichen Schlüssel
- Server prüft, ob dieser in
~/.ssh/authorized_keyssteht - Server schickt eine Challenge
- Client signiert sie mit seinem privaten Schlüssel
- Server prüft die Signatur → Erfolg
- Der private Schlüssel verlässt nie den eigenen Rechner
- Sicherer als ein Passwort, weil die Signatur ohne privaten Schlüssel nicht reproduzierbar ist
Phase 3: Session Phase
- Verbindung steht – die eigentliche Arbeit beginnt
- SSH öffnet Channels für verschiedene Aufgaben:
| Channel-Typ | Verwendung | Beispiel |
|---|---|---|
shell |
Interaktive Terminal-Sitzung | ssh user@server
|
exec |
Einzelnen Befehl ausführen | ssh user@server ls -la
|
subsystem sftp |
Dateiübertragung | sftp user@server
|
direct-tcpip |
Port-Forwarding / Tunnel | ssh -L 8080:localhost:80 user@server
|
- Alle Daten sind verschlüsselt und integritätsgeschützt
Häufige Fehlermeldungen
Host-Key-Warnung
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- Ursache: Host Key hat sich geändert (z. B. nach Neuinstallation)
- Lösung:
ssh-keygen -R server.example.com
Permission denied (publickey)
Permission denied (publickey).
- Ursache: Public Key nicht in
~/.ssh/authorized_keys, oder Berechtigungen falsch - Lösung:
ssh-copy-id user@server chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Verwendete Algorithmen
| Kategorie | Empfehlung | Zweck |
|---|---|---|
| Key Exchange | curve25519-sha256 |
Session Key ableiten |
| Host Key | ssh-ed25519 |
Server-Identität beweisen |
| Verschlüsselung | aes256-gcm@openssh.com |
Datenverschlüsselung |
| Integrität | hmac-sha2-256-etm |
Manipulation erkennen |
| Client-Schlüssel | ed25519 |
User Authentication |
Siehe auch
- SSH – Grundlagen und Einführung
- OpenSSH – Die meistgenutzte SSH-Implementierung
- SSH-Keygen – Schlüsselpaare generieren
- SFTP – Sicherer Dateitransfer über SSH
- SSH-Tunnel – Port-Forwarding und Tunneling
Weblinks
- openssh.com – Offizielle OpenSSH-Website
- RFC 4251 – SSH Protocol Architecture
- RFC 4252 – SSH Authentication Protocol