## 🔐 SSH – Secure Shell
### Definition & Zweck
- SSH ist ein **sicheres Protokoll für entfernte Verbindungen** zwischen Client & Server.
- Ersatz für unsichere Protokolle wie Telnet, FTP, R-Login, RSH, etc.
- Unterstützt: **Datenverschlüsselung, Authentifizierung, Integrität, Komprimierung**
- SSH agiert als **Tunnelsystem**, transportiert z. B. SMTP, POP, X11 sicher.
---
## 🧱 ARCHITEKTUR
### SSH besteht aus 3 Schichten:
1. **Transportschicht-Protokoll**:
    - Authentifiziert Server, sichert Vertraulichkeit & Integrität.
    - Optional: Kompression.
        
2. **User-Authentifizierungsprotokoll**:
    - Authentifiziert Benutzer gegenüber dem Server.
        
3. **Verbindungsprotokoll**:
    - Multiplexing mehrerer Kanäle über eine SSH-Verbindung.
        
---
## 🔐 SICHERHEIT
- **Verschlüsselungsalgorithmen**: AES, DES, Blowfish, ArcFour, CAST128, Twofish
- **Key Exchange**: RSA-basierte, asymmetrische Schlüsselaustauschverfahren
- **Authentifizierung**: asymmetrisch (Public/Private Key)
- Keine Schlüssel werden dauerhaft gespeichert (nur temporär im Speicher)
---
## 🗝️ AUTHENTIFIZIERUNG
### 1. **Host-bezogen**
- IP-basiert (unsicher)
- RSA-basiert:
    - Public Key wird auf Server gespeichert
    - Client beweist Besitz des Private Keys
        
### 2. **User-bezogen**
- **RSA-Authentifizierung** mit Challenge-Response
- **Passwort** (verschlüsselt übertragen, aber weniger sicher)
- **RHost-RSA**: Mischung aus IP + RSA
---
## 🔐 SCHLÜSSELPAARE
- Jeder Client/Host besitzt ein eigenes RSA/ECDSA-Schlüsselpaar
- Tools: `ssh-keygen`, PuTTYgen
- Private Key: bleibt geheim auf Client
- Public Key: wird auf Server (z. B. in `authorized_keys`) hinterlegt
---
## 🔁 VERBINDUNGSAUFBAU (Ablauf)
1. **TCP-Verbindung** vom Client zum Server
2. **Protokoll- & Versionsaustausch**
3. **Umstieg auf binäres SSH-Protokoll**
4. Server sendet:
    - Public Host Key (langfristig)
    - Public Server Key (flüchtig, stündlich neu)
        
5. Austausch der unterstützten Algorithmen
6. Client generiert 256-Bit **Sitzungsschlüssel**
7. Verschlüsselt diesen mit beiden Server-Keys → sendet verschlüsselt
8. Server entschlüsselt mit privaten Keys
9. Server schickt Quittung → verschlüsselte Verbindung aktiv
10. Client authentifiziert sich
11. Sitzung wird eingerichtet
---
## 🧠 SCHLÜSSELMANAGEMENT
- **Private Schlüssel**:
    - Nie weitergeben, mit Passphrase sichern
    - Auth Agents wie `ssh-agent`, `Pageant` speichern Keys im Speicher
        
- **Public Keys**:
    - Nur vertrauenswürdige auf Server hinterlegen
        
---
## 🛡️ SICHERHEITSFEATURES & ABSICHERUNG
- **MiM-Angriffe** können durch Key-Verifikation verhindert werden
- **Passwort-Auth deaktivieren** (empfohlen):
    - Konfigurierbar in `sshd_config`: `PasswordAuthentication no`
        
- **2FA möglich**
- Analyse-Tool: `ssh-audit` zur Prüfung von Konfiguration und Sicherheit
---
## 🔧 BEFEHLE (OpenSSH)
|Befehl|Beschreibung|
|---|---|
|`ssh`|Verbindung zum Server|
|`sshd`|SSH-Serverdienst|
|`ssh-agent`|Key-Agent|
|`ssh-add`|Keys zum Agent hinzufügen|
|`scp`|Dateiübertragung|
|`sftp`|sicherer FTP-Ersatz|
|`ssh-keygen`|Schlüsselpaar erzeugen|
|`ssh-keyscan`|Schlüssel von Hosts abrufen|
|`sftp-server`|Serverseitige SFTP-Komponente|
---
## 📦 SSH-PROTOKOLLVARIANTEN
|Variante|Merkmale|
|---|---|
|**SSH1**|unsicher, veraltet|
|**SSH2**|neuer, sicherer (neu geschrieben, bessere Kryptografie)|
|**OpenSSH**|Open-Source, nutzt OpenSSL für Krypto, unterstützt SSH1 & SSH2|
---
## ✅ KLAUSURRELEVANTE PUNKTE
- SSH ersetzt unsichere Protokolle → **verschlüsselt alles**
- Authentifizierung über **RSA/ECDSA Schlüsselpaar**
- Sitzungsschlüssel durch asymmetrische Verschlüsselung ausgetauscht → dann symmetrisch
- Tools wie `ssh-agent` & `ssh-add` erhöhen Sicherheit & Komfort
- **Passwortauthentifizierung deaktivieren** (wo möglich)
- **ssh-audit** zur Analyse verwenden
- SSH2/OpenSSH = **Standard**, SSH1 = **veraltet**