SSH und Telnet

Was ist Remote-Zugriff?

Als Systemadministrator musst du Server konfigurieren, Dienste verwalten und Fehler beheben – oft ohne physisch vor Ort zu sein. Remote-Zugriff ermöglicht es, die Kommandozeile eines entfernten Systems über das Netzwerk zu bedienen als würdest du direkt daran sitzen.

Telnet – Der unsichere Vorgänger

Telnet war das erste verbreitete Remote-Protokoll – entwickelt 1969. Es ermöglicht die Fernsteuerung eines Systems über eine Terminalverbindung auf Port 23.

Das fatale Problem: Telnet überträgt alles im Klartext – Benutzername, Passwort und sämtliche Befehle sind für jeden im Netzwerk lesbar:

Wireshark-Mitschnitt einer Telnet-Sitzung:
login: admin
Password: superGeheim!    ← Im Klartext sichtbar!
$ cat /etc/passwd         ← Alle Befehle lesbar
$ ifconfig

Telnet sollte in modernen Netzwerken nicht mehr verwendet werden. Es wird heute nur noch für Diagnosezwecke genutzt um TCP-Ports zu testen.

SSH – Secure Shell

SSH (Secure Shell) wurde 1995 als sichere Alternative zu Telnet entwickelt. Es verschlüsselt die gesamte Verbindung und bietet darüber hinaus viele weitere Funktionen:

Funktion

Beschreibung

Verschlüsselte Shell

Remote-Kommandozeile vollständig verschlüsselt

SFTP

Sichere Dateiübertragung als SSH-Subsystem

SCP

Sichere Dateiübertragung über SSH

Port-Forwarding

Netzwerkports durch SSH-Tunnel leiten

X11-Forwarding

Grafische Anwendungen über SSH weiterleiten

Key-Authentifizierung

Login ohne Passwort per Public-Key-Verfahren

SSH-Verbindungsaufbau

Client                              Server (Port 22)
  │                                   │
  │──── TCP-Verbindung ──────────────▶│
  │                                   │
  │◀─── Server-Identifikation ───────│  "SSH-2.0-OpenSSH_8.9"
  │──── Client-Identifikation ───────▶│  "SSH-2.0-OpenSSH_9.0"
  │                                   │
  │◀══► Key Exchange (ECDH/DH) ══════│  Sitzungsschlüssel aushandeln
  │                                   │
  │◀─── Server-Hostskey ─────────────│  Server beweist seine Identität
  │     (beim ersten Mal bestätigen)  │
  │                                   │
  │──── Authentifizierung ───────────▶│  Passwort oder SSH-Key
  │                                   │
  │◀════ Verschlüsselte Shell ═══════▶│

SSH-Authentifizierungsmethoden

Passwort-Authentifizierung

ssh benutzer@192.168.1.10
benutzer@192.168.1.10's password: [Passwort eingeben]

Nachteil: Passwort muss bei jeder Verbindung eingegeben werden
          Anfällig für Brute-Force-Angriffe

Public-Key-Authentifizierung (empfohlen)

Konzept:
Private Key → Bleibt beim Client (geheim!)
Public Key  → Wird auf dem Server hinterlegt (~/.ssh/authorized_keys)

Schritt 1: Schlüsselpaar erstellen (einmalig):
ssh-keygen -t ed25519 -C "mein-laptop"
→ Erstellt: ~/.ssh/id_ed25519 (privat) und ~/.ssh/id_ed25519.pub (öffentlich)

Schritt 2: Public Key auf Server kopieren:
ssh-copy-id benutzer@192.168.1.10

Schritt 3: Login ohne Passwort:
ssh benutzer@192.168.1.10
→ Direkte Verbindung ohne Passworteingabe!

Wichtige SSH-Befehle

Verbindung aufbauen:
ssh benutzer@server                  → Standard-Login
ssh -p 2222 benutzer@server          → Anderen Port verwenden
ssh -i ~/.ssh/meinkey benutzer@server → Spezifischen Key verwenden

Dateien übertragen:
scp datei.txt benutzer@server:/home/benutzer/    → Datei hochladen
scp benutzer@server:/etc/hosts ./                → Datei herunterladen
scp -r ordner/ benutzer@server:/tmp/             → Ordner kopieren

Port-Forwarding:
ssh -L 8080:localhost:80 benutzer@server   → Lokaler Port 8080 → Server Port 80
ssh -R 9090:localhost:3000 benutzer@server → Server Port 9090 → Lokal Port 3000

SSH-Konfigurationsdatei (~/.ssh/config):
Host myserver
    HostName 192.168.1.10
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
→ Danach einfach: ssh myserver

SSH-Sicherheitskonfiguration

Server-Konfiguration (/etc/ssh/sshd_config):

Port 2222                          # Standardport 22 ändern
PermitRootLogin no                 # Root-Login deaktivieren
PasswordAuthentication no          # Nur Key-Authentifizierung
MaxAuthTries 3                     # Max. 3 Fehlversuche
AllowUsers admin deploy            # Nur bestimmte Benutzer
ClientAliveInterval 300            # Inaktive Sessions nach 5 Min trennen
X11Forwarding no                   # X11 deaktivieren (wenn nicht benötigt)

SSH vs. Telnet

Merkmal

Telnet

SSH

Port

23

22

Verschlüsselung

Keine – Klartext

Vollständig verschlüsselt

Authentifizierung

Passwort (im Klartext)

Passwort oder SSH-Key

Dateiübertragung

Nein

Ja (SFTP, SCP)

Port-Forwarding

Nein

Ja

Einsatz heute

Nur Diagnose (Porttest)

Standard für Remote-Zugriff

Telnet als Diagnosewerkzeug

Auch wenn Telnet für Remote-Zugriff nicht mehr genutzt werden sollte, ist es ein nützliches Werkzeug um TCP-Ports zu testen:

Prüfen ob Port 80 (HTTP) erreichbar ist:
telnet 192.168.1.10 80
→ Connected: Port ist offen
→ Connection refused: Port ist zu

Prüfen ob SMTP-Server antwortet:
telnet mail.example.com 25
220 mail.example.com ESMTP ready   ← Server antwortet!

Alternative (moderner):
nc -zv 192.168.1.10 80             → netcat
curl -v telnet://192.168.1.10:80   → curl

Zusammenfassung

  • Telnet ermöglicht Remote-Zugriff auf Port 23 – überträgt alles im Klartext

  • Telnet sollte nicht mehr für Remote-Zugriff genutzt werden – nur noch für Portdiagnose

  • SSH ist die sichere Alternative – Port 22, vollständige Verschlüsselung

  • SSH unterstützt Passwort- und Public-Key-Authentifizierung

  • Public-Key-Authentifizierung ist sicherer und komfortabler als Passwörter

  • SSH bietet zusätzlich SFTP, SCP und Port-Forwarding

  • Root-Login und Passwort-Authentifizierung sollten in der SSH-Konfiguration deaktiviert werden