SSH
SSH (Secure Shell) ist ein kryptografisches Netzwerkprotokoll für sichere Remote-Verbindungen über Port 22. Es ermöglicht verschlüsselten Server-Zugriff, Dateiübertragung und Port-Forwarding.
SSH (Secure Shell) ist ein kryptografisches Netzwerkprotokoll für die sichere Kommunikation zwischen Computern über unsichere Netzwerke. Mit SSH kannst du dich verschlüsselt auf entfernten Servern anmelden, Befehle ausführen und Dateien übertragen. Das Protokoll nutzt standardmäßig Port 22 und ersetzt unsichere Vorgänger wie Telnet, rlogin oder rsh, bei denen Zugangsdaten im Klartext übertragen wurden.
Geschichte und Entwicklung
SSH wurde 1995 vom finnischen Informatiker Tatu Ylönen an der Technischen Universität Helsinki entwickelt. Auslöser war ein Passwort-Sniffing-Angriff auf das Universitätsnetzwerk, bei dem Angreifer unverschlüsselte Zugangsdaten abfangen konnten. Ylönen erkannte die dringende Notwendigkeit eines sicheren Protokolls für Remote-Verbindungen.
Im Juli 1995 veröffentlichte Ylönen SSH1 als Open-Source-Freeware. Die Verbreitung war rasant: Ende 1995 nutzten bereits etwa 20.000 Anwender in 50 Ländern das Protokoll. Im Dezember 1995 gründete Ylönen die SSH Communications Security Corp., um die Entwicklung fortzuführen.
Von SSH-1 zu SSH-2
Das ursprüngliche SSH-1-Protokoll wies einige Designschwächen auf, die ohne Kompatibilitätsbruch nicht behoben werden konnten. Daher führte SSH Communications Security 1996 SSH-2 ein - eine vollständig überarbeitete Version mit verbesserten Algorithmen und Sicherheitsmechanismen. SSH-2 ist absichtlich nicht abwärtskompatibel zu SSH-1 und gilt heute als der Standard.
OpenSSH als Open-Source-Standard
OpenSSH wurde 1999 vom OpenBSD-Projekt als freie Implementation veröffentlicht und ist heute die mit Abstand am weitesten verbreitete SSH-Software. Du findest OpenSSH vorinstalliert auf praktisch jedem Linux-System, macOS und seit Windows 10 auch auf Windows. Über 95% aller Server im Internet haben SSH installiert.
Funktionsweise und Architektur
SSH basiert auf einer dreischichtigen Architektur, die in den RFCs 4251-4254 spezifiziert ist. Jede Schicht übernimmt spezifische Aufgaben bei der sicheren Kommunikation.
Transport Layer Protocol
Die Transportschicht bildet das Fundament der SSH-Kommunikation. Sie ist verantwortlich für den Schlüsselaustausch, die Server-Authentifizierung, die Verschlüsselung und die Integritätsprüfung aller übertragenen Daten. Die Transportschicht handelt beim Verbindungsaufbau alle kryptografischen Parameter aus und erneuert die Schlüssel automatisch nach 1 GB übertragener Daten oder einer Stunde.
User Authentication Protocol
Aufbauend auf der sicheren Transportschicht authentifiziert dieses Protokoll den Benutzer gegenüber dem Server. Es unterstützt verschiedene Authentifizierungsmethoden wie Passwort, Public-Key oder Kerberos. Die Authentifizierung läuft bereits verschlüsselt ab, sodass keine Zugangsdaten im Klartext übertragen werden.
Connection Protocol
Das Connection Protocol multiplext den verschlüsselten Tunnel in mehrere logische Kanäle. Über eine einzige SSH-Verbindung kannst du gleichzeitig eine Shell-Session führen, Dateien übertragen und Ports weiterleiten. Diese Effizienz macht SSH besonders netzwerkfreundlich.
Verschlüsselung und Sicherheit
SSH setzt auf mehrere Sicherheitsmechanismen, die zusammenwirken, um die Kommunikation zu schützen. Alle kryptografischen Parameter werden beim Verbindungsaufbau zwischen Client und Server ausgehandelt.
- Symmetrische Verschlüsselung: Nach dem Schlüsselaustausch verschlüsselt SSH alle Daten mit Algorithmen wie AES-256, ChaCha20 oder 3DES
- Asymmetrische Verschlüsselung: Für den initialen Schlüsselaustausch und die Authentifizierung kommen RSA, Ed25519 oder ECDSA zum Einsatz
- Message Authentication Code (MAC): HMAC-SHA256 oder ähnliche Algorithmen stellen sicher, dass Pakete nicht manipuliert wurden
- Perfect Forward Secrecy: Selbst wenn ein Schlüssel kompromittiert wird, bleiben frühere Sitzungen geschützt
Host-Key-Verifizierung
Beim ersten Verbindungsaufbau zu einem Server speichert der SSH-Client dessen öffentlichen Schlüssel (Host Key). Bei späteren Verbindungen vergleicht der Client den präsentierten Schlüssel mit dem gespeicherten. Ändert sich der Schlüssel unerwartet, warnt SSH vor einem möglichen Man-in-the-Middle-Angriff. Diese Warnung solltest du niemals ignorieren, ohne die Ursache zu klären.
Authentifizierungsmethoden
SSH unterstützt verschiedene Methoden zur Benutzerauthentifizierung. Die Wahl der Methode hängt von deinen Sicherheitsanforderungen und der Infrastruktur ab.
Passwort-Authentifizierung
Die einfachste Methode verwendet Benutzername und Passwort. Das Passwort wird durch den verschlüsselten SSH-Tunnel übertragen, ist also nicht im Klartext sichtbar. Allerdings ist diese Methode anfällig für Brute-Force-Angriffe, weshalb viele Administratoren sie deaktivieren.
Public-Key-Authentifizierung
Die sicherere Alternative ist die Authentifizierung mit einem Schlüsselpaar. Du generierst einen privaten Schlüssel (der auf deinem Rechner verbleibt) und einen öffentlichen Schlüssel (den du auf dem Server hinterlegst). Der Server verifiziert, dass du im Besitz des privaten Schlüssels bist, ohne dass dieser übertragen wird.
# SSH-Schlüsselpaar generieren (Ed25519 ist empfohlen)
ssh-keygen -t ed25519 -C "dein-kommentar@beispiel.de"
# Öffentlichen Schlüssel auf Server kopieren
ssh-copy-id benutzer@server.example.com
# Alternativ: Schlüssel manuell hinzufügen
cat ~/.ssh/id_ed25519.pub | ssh benutzer@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Praktische Anwendung
SSH ist das Standardwerkzeug für die Administration von Servern und Netzwerkgeräten. Die wichtigsten Einsatzgebiete umfassen Remote-Shell-Zugriff, sichere Dateiübertragung und Port-Forwarding.
Grundlegende SSH-Befehle
Die folgenden Befehle zeigen die häufigsten Anwendungsfälle für SSH auf der Kommandozeile:
# Verbindung zu einem Server herstellen
ssh benutzer@server.example.com
# Verbindung mit spezifischem Port
ssh -p 2222 benutzer@server.example.com
# Verbindung mit privatem Schlüssel
ssh -i ~/.ssh/mein_schluessel benutzer@server.example.com
# Einzelnen Befehl remote ausführen
ssh benutzer@server "uptime && df -h"
# Dateien mit SCP kopieren
scp lokale-datei.txt benutzer@server:/pfad/zum/ziel/
# Verzeichnis rekursiv kopieren
scp -r ./mein-ordner benutzer@server:/home/benutzer/
SSH-Tunnel und Port-Forwarding
Mit SSH kannst du sichere Tunnel für andere Protokolle erstellen. Das ist nützlich, um auf Dienste zuzugreifen, die nur lokal auf dem Server lauschen, oder um Traffic durch eine verschlüsselte Verbindung zu leiten.
# Local Port Forwarding: Lokaler Port 8080 -> Server Port 80
ssh -L 8080:localhost:80 benutzer@server.example.com
# Remote Port Forwarding: Server Port 9000 -> Lokaler Port 3000
ssh -R 9000:localhost:3000 benutzer@server.example.com
# Dynamic Port Forwarding (SOCKS-Proxy)
ssh -D 1080 benutzer@server.example.com
SSH-Konfiguration
Mit der SSH-Konfigurationsdatei ~/.ssh/config kannst du Verbindungseinstellungen für verschiedene Server speichern. Das spart Tipparbeit und macht die Verwaltung mehrerer Server übersichtlicher.
# ~/.ssh/config Beispiel
Host webserver
HostName 192.168.1.100
User admin
Port 22
IdentityFile ~/.ssh/id_webserver
Host dbserver
HostName db.example.com
User root
Port 2222
IdentityFile ~/.ssh/id_db
# Verbindung dann einfach mit:
# ssh webserver
SSH vs. Telnet und andere Protokolle
SSH hat ältere Protokolle wie Telnet, rlogin und rsh weitgehend abgelöst. Der entscheidende Unterschied liegt in der Sicherheit: Diese älteren Protokolle übertragen alle Daten einschließlich Passwörter im Klartext.
| Eigenschaft | SSH | Telnet |
|---|---|---|
| Verschlüsselung | Vollständig | Keine |
| Authentifizierung | Passwort, Public-Key, Kerberos | Nur Passwort (Klartext) |
| Standard-Port | 22 | 23 |
| Dateiübertragung | SCP, SFTP integriert | Nicht möglich |
| Port-Forwarding | Ja | Nein |
| Sicherheit | Hoch | Keine |
Telnet solltest du heute nur noch in isolierten Testumgebungen verwenden. Für produktive Systeme ist SSH der einzig akzeptable Weg für Remote-Zugriffe. Selbst in Legacy-Systemen lässt sich meist SSH nachrüsten.
SSH in der IT-Praxis
Als Fachinformatiker für Systemintegration wirst du SSH täglich nutzen - sei es für die Verwaltung von Servern, die Konfiguration von Netzwerkgeräten oder das Troubleshooting in der Infrastruktur. SSH-Kenntnisse sind Grundvoraussetzung für praktisch jeden Job im Bereich Systemadministration.
Auch in der Anwendungsentwicklung begegnet dir SSH regelmäßig: beim Deployment von Anwendungen auf Server, bei der Arbeit mit Git-Repositories über SSH oder beim Zugriff auf Entwicklungs- und Staging-Umgebungen. Tools wie Docker und CI/CD-Pipelines nutzen SSH im Hintergrund für sichere Verbindungen.