SSH - Secure Shell

IETF-Standard für verschlüsselte Remote-Verbindungen

SSH - Secure Shell

Kryptographisches Netzwerkprotokoll für sichere Verbindungen zu entfernten Servern

IETF-Standard RFC 4251 - 4254 Port 22/TCP

Was ist SSH?

SSH (Secure Shell) ist ein kryptographisches Netzwerkprotokoll, das eine sichere Verbindung zwischen einem Client und einem Server ermöglicht. Es wurde als Ersatz für unsichere Protokolle wie Telnet, rlogin und rsh entwickelt.

SSH bietet:

  • Verschlüsselung: Alle Daten werden verschlüsselt übertragen
  • Authentifizierung: Server und Client verifizieren ihre Identität
  • Integrität: Schutz vor Manipulation der Daten
  • Tunneling: Weiterleitung anderer Protokolle (Port Forwarding)

Wichtige RFCs

RFCTitel
RFC 4251SSH Protocol Architecture
RFC 4252SSH Authentication Protocol
RFC 4253SSH Transport Layer Protocol
RFC 4254SSH Connection Protocol
RFC 4716SSH Public Key File Format
RFC 8332SSH Ed25519 Keys

Alle RFCs sind von der IETF standardisiert und frei verfügbar.

Versionen

  • SSH-1 (1995): Erste Version von Tatu Ylönen, später Sicherheitslücken entdeckt
  • SSH-2 (2006): Komplett neu entwickelte Version, IETF-Standard, sicherer
  • OpenSSH (1999): Open-Source-Implementierung, heute am weitesten verbreitet
1995

SSH-1 von Tatu Ylönen (Finland)

1999

OpenSSH 1.0 (OpenBSD)

2006

SSH-2 als IETF-Standard (RFC 4251-4254)

Wie funktioniert SSH?

Eine SSH-Verbindung wird in drei Phasen aufgebaut:

1. Transport Layer

Aufbau der verschlüsselten Verbindung, Server-Authentifizierung, Aushandlung von Algorithmen

2. Authentifizierung

Client weist seine Identität nach (Passwort, Public Key, etc.)

3. Verbindung

Multiplexing mehrerer Kanäle (Shell, Dateiübertragung, Port Forwarding)

Typischer Verbindungsaufbau:

# Client initiiert Verbindung
$ ssh benutzer@server.example.com

# Server sendet öffentlichen Schlüssel
# Client prüft gegen bekannte Hosts (~/.ssh/known_hosts)

# Aushandlung von Algorithmen:
KEX: diffie-hellman-group-exchange-sha256
ENC: aes256-ctr
MAC: hmac-sha2-256

# Authentifizierung (z.B. Passwort)
benutzer@server's password: ********

Authentifizierungsmethoden

Passwort

Einfachste Methode – Benutzername + Passwort. Bequem, aber weniger sicher bei schwachen Passwörtern.

ssh user@host

Public-Key

Sicherste Methode – Schlüsselpaar (privat/öffentlich). Der Server kennt nur den öffentlichen Schlüssel.

# Schlüssel erstellen
ssh-keygen -t ed25519
# Kopieren zum Server
ssh-copy-id user@host

Zwei-Faktor

Kombination aus Passwort/Key + TOTP (Google Authenticator) oder Hardware-Token (YubiKey).

SchlüsseltypAlgorithmusSicherheitEmpfehlung
RSA2048/4096 BitGutÄltere Systeme
ECDSA256/384/521 BitSehr gutModerne Systeme
Ed25519256 BitHervorragendEmpfohlen (schnell, sicher)

Typische Anwendungen

  • Remote Shell: sicheres Terminal auf entfernten Servern
  • SFTP/SCP: sichere Dateiübertragung
  • Port Forwarding: Tunnel für andere Dienste
  • X11 Forwarding: grafische Anwendungen über SSH
  • Git über SSH: sichere Git-Operationen

Port Forwarding (Tunneling)

# Lokales Forwarding
ssh -L 8080:localhost:80 user@host
# => localhost:8080 leitet zu host:80

# Remote Forwarding
ssh -R 8080:localhost:80 user@host

# Dynamisches Forwarding (SOCKS-Proxy)
ssh -D 1080 user@host

Anwendung: Absicherung unsicherer Protokolle, Umgehung von Firewalls, Zugriff auf interne Dienste.

OpenSSH

OpenSSH ist die Open-Source-Implementierung des SSH-Protokolls, entwickelt vom OpenBSD-Projekt. Es ist heute der De-facto-Standard.

  • Vorinstalliert auf Linux, macOS, BSD
  • Verfügbar für Windows (PowerShell, WSL)
  • Aktiv weiterentwickelt (regelmäßige Updates)
  • Unterstützt alle modernen Algorithmen

Proprietäre SSH

  • SSH Communications Security: Original SSH von Tatu Ylönen
  • VanDyke SecureCRT: Kommerzieller Client für Windows
  • PuTTY: Freier Windows-Client (nicht OpenSSH-basiert)

Server-Konfiguration (sshd_config)

# Sicherheits-Einstellungen
Port 22
Protocol 2
PermitRootLogin prohibit-password
PubkeyAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server

# Nur bestimmte Benutzer erlauben
AllowUsers admin developer

# Maximale Versuche
MaxAuthTries 3
MaxSessions 10

SSH-Keys verwalten

Wichtige Dateien:

  • ~/.ssh/id_ed25519 – Privater Schlüssel (NIEMALS weitergeben!)
  • ~/.ssh/id_ed25519.pub – Öffentlicher Schlüssel
  • ~/.ssh/known_hosts – Bekannte Server-Schlüssel
  • ~/.ssh/authorized_keys – Erlaubte öffentliche Schlüssel (auf dem Server)
  • ~/.ssh/config – Client-Konfiguration

Client-Konfiguration (~/.ssh/config)

# Standard-Einstellungen
Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3
  Compression yes

# Spezifische Hosts
Host webserver
  HostName 192.168.1.100
  User admin
  Port 2222
  IdentityFile ~/.ssh/webserver.key

# Verwendung: ssh webserver

SSH-Sicherheit – Best Practices

✅ Empfohlen
  • Ed25519- oder RSA-4096-Schlüssel verwenden
  • Passwort-Authentifizierung deaktivieren (nur Public-Key)
  • Root-Login verbieten (PermitRootLogin no)
  • SSH auf nicht-standard Port (z.B. 2222)
  • Fail2ban für Brute-Force-Schutz
  • Regelmäßige Updates
❌ Zu vermeiden
  • SSH-1 (veraltet, unsicher)
  • Schwache Passwörter
  • RSA-1024 oder DSA-Schlüssel
  • Offene Ports ohne Firewall
  • Veraltete OpenSSH-Versionen

Veraltete Alternativen

  • Telnet (Port 23): Keine Verschlüsselung – alles im Klartext
  • rlogin/rsh: Unsicher, keine Authentifizierung
  • FTP: Dateiübertragung ohne Verschlüsselung

Diese Protokolle sollten nicht mehr verwendet werden – SSH ist der moderne Standard.

Zukunft: Post-Quanten-Kryptographie

Forschende arbeiten an quantenresistenten Algorithmen für SSH. Aktuelle Ansätze:

  • Hybrid-Schlüsselaustausch (klassisch + quantenresistent)
  • NIST-Wettbewerb für Post-Quantum-Kryptographie

SSH – Der Standard für sichere Remote-Zugriffe

SSH ist aus der modernen IT nicht mehr wegzudenken. Es wird von Administratoren, Entwicklern und Cloud-Plattformen weltweit eingesetzt. Die Kombination aus starker Verschlüsselung, flexibler Authentifizierung und vielseitigen Einsatzmöglichkeiten macht es zum unverzichtbaren Werkzeug.

IETF RFC 4251-4254 OpenSSH Public-Key