Plattform:
Tages-Workshop

Sicher auf entfernte Rechner — SSH von Anfang an

Vom ersten Login mit Passwort über Schlüssel, ~/.ssh/config und Dateitransfer bis zu Tunneln, Sprungservern und dem gehärteten Server. Dein Fortschritt wird lokal gespeichert.

Worum geht's?

SSH („Secure Shell") ist die sichere Standard-Art, einen entfernten Rechner über die Kommandozeile zu bedienen — alles läuft verschlüsselt. Damit steuerst du Server fern, überträgst Dateien, tunnelst Verbindungen und sicherst deinen Git-Zugang.

Diese Schulung führt dich von null: erste Verbindung mit Passwort → Schlüssel statt Passwort → ~/.ssh/config → Dateien übertragen → Tunnel & Sprungserver → bis zum gehärteten Server.

Selbstlern-Kurs zum Durchklicken — dein Fortschritt wird lokal gespeichert.

? Für wen ist SSH wichtig?

Überall dort, wo du einen Rechner fernbedienen, absichern oder warten musst.

🖥️
VPS-/Server-Mieter
Einloggen, absichern, fernsteuern.
🍓
Raspberry Pi / Heimserver
Ohne Monitor bedienen.
🔀
Entwickler:innen
Git über SSH (GitHub/GitLab/Forgejo).
📦
Self-Hoster
Dienste betreiben & warten.
💡 Neu hier? Arbeite die Stufen einfach von oben nach unten durch — die erste Verbindung ist in 2 Minuten gemacht.

🗺️ Die 9 Stufen

Keine Vorkenntnisse nötig. Einfache Terminal- und Datei-Grundlagen helfen. Module 1–5 funktionieren auch als kompakter Halbtag.
Stufe 1

Was ist SSH?

Das mentale Modell, wofür Du SSH brauchst und wie Du sofort loslegen kannst.

1 Das mentale Modell

SSH steht für Secure Shell: eine verschlüsselte Verbindung zwischen Deinem Rechner (Client) und einem entfernten Rechner (Server).

SSH-Verbindung — Skizze
Skizze
Der SSH-Daemon (sshd) lauscht auf dem Server (Port 22), der SSH-Client auf Deinem Rechner baut die Verbindung auf.
SSH in einem Satz: verschlüsselte Fernsteuerung + Dateitransfer + Tunnel — Dein Schweizer Taschenmesser für entfernte Rechner.

2 Wofür Du SSH brauchst

🖥️
Remote-Shell
Server per Kommandozeile fernsteuern — als wärst Du direkt davor.
📁
Dateien übertragen
scp, sftp und rsync nutzen alle den SSH-Kanal.
🔀
Tunnel & Forwarding
Dienste sicher durch die verschlüsselte Verbindung tunneln.
🔑
Git über SSH
GitHub, GitLab, Forgejo — Push/Pull ohne Passwort per SSH-Key.

3 Wo läuft der SSH-Client?

🪟 Windows: Öffne Windows Terminal oder PowerShell — der Befehl ssh ist seit Windows 10 (Version 1809) vorinstalliert. Kein Extra-Download nötig.
macOS: Öffne die Terminal-App (Programme → Dienstprogramme → Terminal). Der ssh-Befehl ist vorinstalliert.
🐧 Linux: Öffne Dein Terminal. Der Befehl ssh ist mit dem Paket openssh-client vorinstalliert (bei den meisten Distributionen ab Werk).
Zum Testen: ssh -V zeigt Dir die installierte OpenSSH-Version.

4 Einen Übungs-Server bekommen

Zum Mitmachen brauchst Du einen entfernten Linux-Rechner. Möglichkeiten:
  • VPS (empfohlen): VPS bei Hostinger — ab wenigen Euro/Monat, in Minuten bereit.
  • Raspberry Pi oder Heimserver: jeder Linux-Rechner im Netzwerk tut es.
  • Lokale VM: VirtualBox oder WSL (Windows) für erste Versuche.

✓ Geschafft, wenn Du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 2

Die erste Verbindung

Einloggen, den Host-Key verstehen und typische Fehlerbilder kennen.

1 Verbinden

Der grundlegende SSH-Befehl ist denkbar einfach:

1Verbindung aufbauen
# Standard: Benutzername @ Hostname oder IP
ssh user@203.0.113.10

# Anderen Port angeben (Standard ist 22)
ssh -p 2222 user@203.0.113.10

# Abmelden: exit oder Strg-D
exit
user = Dein Benutzername auf dem Server · 203.0.113.10 = IP oder Hostname. Nach der Verbindung bist Du in der Shell des Servers.

2 Der Host-Key — TOFU

Beim allerersten Verbindungsaufbau fragt SSH nach Deiner Bestätigung:

Terminal — erster Login
$ ssh user@203.0.113.10 The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established. ED25519 key fingerprint is SHA256:abc123xyz... This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '203.0.113.10' (ED25519) to the list of known hosts. user@meinserver:~$
Trust on First Use (TOFU): Beim ersten yes speichert SSH den Fingerprint des Servers in ~/.ssh/known_hosts. Bei jedem weiteren Login wird geprüft, ob der Fingerprint noch stimmt — so erkennst Du Man-in-the-Middle-Angriffe.

3 Typische Fehlerbilder

  1. Connection refused
    Der SSH-Daemon (sshd) läuft nicht, oder Du verwendest den falschen Port, oder eine Firewall blockiert die Verbindung.
  2. Permission denied (publickey,password)
    Falscher Benutzername, falsches Passwort oder Dein SSH-Key ist auf dem Server nicht eingetragen.
  3. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    Der Fingerprint weicht von dem in ~/.ssh/known_hosts gespeicherten ab. Nach einer bewussten Server-Neuinstallation ist das normal — dann den alten Eintrag entfernen:
    !Alten Host-Key entfernen
    ssh-keygen -R 203.0.113.10
    Achtung: Diesen Befehl nur ausführen, wenn Du sicher bist, dass der Server sich legitim geändert hat (z. B. neu aufgesetzt). Bei Zweifeln erst beim Hoster verifizieren.

✓ Geschafft, wenn Du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 3

Schlüssel statt Passwort

SSH-Schlüsselpaar erzeugen, übertragen und mit dem ssh-agent komfortabel nutzen.

1 Das Prinzip: Schloss und Schlüssel

Schlüsselpaar — Skizze
Skizze
Nur das passende Schlüsselpaar öffnet die Tür. Der private Key verlässt Deinen Rechner nie.

2 Schlüsselpaar erzeugen

2Neues ed25519-Schlüsselpaar
ssh-keygen -t ed25519 -C "max@laptop"

# Ergebnis in ~/.ssh/:
#   id_ed25519      ← privater Key (NIEMALS weitergeben)
#   id_ed25519.pub  ← öffentlicher Key (landet auf dem Server)
Das Kommentar (-C) hilft Dir, später zu erkennen, von welchem Gerät der Key stammt. Ed25519 ist modern und empfohlen — kompakter und sicherer als das ältere RSA.
Nie teilen: id_ed25519 (ohne .pub) ist Dein privater Schlüssel. Er verlässt Deinen Rechner nicht — nicht per Mail, nicht per Paste, nicht auf GitHub.

3 Public Key auf den Server übertragen

3Key kopieren
# Einzeiliger Befehl — erledigt alles automatisch
ssh-copy-id user@203.0.113.10
Der Befehl hängt den öffentlichen Key an ~/.ssh/authorized_keys auf dem Server an und setzt die richtigen Berechtigungen.
🪟 Windows: ssh-copy-id fehlt manchmal. Alternative: Den Inhalt von ~/.ssh/id_ed25519.pub kopieren und auf dem Server manuell in ~/.ssh/authorized_keys einfügen:
# Auf dem Server ausführen (nach Passwort-Login):
mkdir -p ~/.ssh
echo "<Inhalt von id_ed25519.pub hier>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

4 Passphrase & ssh-agent

Empfehlung: Vergib beim ssh-keygen eine Passphrase. Sie schützt den privaten Key, falls Dein Gerät in falsche Hände gerät. Der ssh-agent merkt sich die Passphrase für die aktuelle Sitzung — Du gibst sie nur einmal ein.
🐧Linux — ssh-agent starten
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519   # Passphrase einmalig eingeben
macOS — ssh-agent starten
eval "$(ssh-agent -s)"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
--apple-use-keychain speichert die Passphrase zusätzlich im macOS-Schlüsselbund — nach jedem Neustart automatisch verfügbar.
🪟Windows — ssh-agent aktivieren (PowerShell als Admin)
# Dienst einmalig auf automatischen Start setzen:
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agent

# Key hinzufügen (normale PowerShell):
ssh-add $env:USERPROFILE\.ssh\id_ed25519

✓ Geschafft, wenn Du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 4

~/.ssh/config

Host-Aliasse mit gespeicherten Einstellungen — kurze Befehle statt langer Optionslisten.

1 Wozu eine Config-Datei?

Ohne Config: ssh -p 2222 -i ~/.ssh/id_ed25519 max@203.0.113.10
Mit Config: ssh meinserver
Die Datei ~/.ssh/config speichert alle Verbindungsparameter pro Host als benannten Alias. scp, sftp und rsync nutzen dieselben Aliasse automatisch.

2 Ein einfacher Host-Eintrag

2~/.ssh/config — Beispiel
Host meinserver
    HostName     203.0.113.10
    User         max
    Port         22
    IdentityFile ~/.ssh/id_ed25519
Nach dem Speichern genügt ssh meinserver — alle Parameter werden aus der Config gelesen. Der Alias funktioniert auch für scp meinserver:/pfad/datei . und rsync.

3 Mehrere Server & gemeinsame Defaults

3~/.ssh/config — mehrere Hosts
# Zweiter Server
Host staging
    HostName     203.0.113.20
    User         deploy
    IdentityFile ~/.ssh/id_deploy

# Gemeinsame Defaults für alle Hosts (muss am Ende stehen)
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    AddKeysToAgent      yes
ServerAliveInterval 60 hält die Verbindung aktiv — verhindert Timeouts bei längerem Nichtstun. AddKeysToAgent yes lädt Keys automatisch in den ssh-agent.

4 Berechtigungen nicht vergessen

Wichtig: Die Config-Datei darf nur für Dich lesbar sein, sonst verweigert OpenSSH den Start.
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/config
Windows setzt Berechtigungen über die Dateieigenschaften; OpenSSH unter Windows prüft NTFS-ACLs. In der Regel ist der Standard korrekt, wenn die Datei im Benutzerordner liegt.

✓ Geschafft, wenn Du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 5

Dateien übertragen

scp für schnelle Einzeldateien, sftp zum interaktiven Stöbern und rsync fürs wiederholte Deployen.

1 scp — schnelle Dateiübertragung

scp (Secure Copy) kopiert Dateien über SSH — die Syntax ist wie cp, aber mit Remote-Pfaden.

1scp — hoch- und herunterladen
# Datei hochladen (lokal → Server)
scp datei.txt meinserver:/home/max/

# Datei herunterladen (Server → lokal)
scp meinserver:/home/max/datei.txt .

# Ganzen Ordner hochladen (rekursiv mit -r)
scp -r mein-ordner/ meinserver:/home/max/
Die Ziel-Syntax ist immer alias:/absoluter/pfad. Der Punkt . als Ziel = aktueller lokaler Ordner. Mit Config-Alias entfällt die lange IP+Optionsliste.

2 sftp — interaktiv stöbern

sftp öffnet eine interaktive FTP-ähnliche Sitzung über den SSH-Kanal.

Terminal — sftp-Sitzung
$ sftp meinserver Connected to meinserver. sftp> ls datei.txt logs/ deploy/ sftp> put bericht.pdf Uploading bericht.pdf to /home/max/bericht.pdf sftp> get logs/error.log Fetching /home/max/logs/error.log to error.log sftp> bye
Wichtige sftp-Befehle: ls / pwd / cd (Server-Seite) · lls / lpwd / lcd (lokal) · put (hochladen) · get (herunterladen) · bye (beenden).

3 rsync — Ordner synchronisieren

rsync überträgt nur geänderte Dateien — ideal für wiederholtes Deployen.

3rsync über SSH
# Ordner hochladen (nur Geändertes, verbose, komprimiert)
rsync -avz mein-ordner/ meinserver:/var/www/html/

# Mit --delete: Zieldateien entfernen, die in der Quelle fehlen
rsync -avz --delete mein-ordner/ meinserver:/var/www/html/
-a = Archiv-Modus (erhält Rechte/Timestamps) · -v = verbose · -z = komprimiert übertragen. Tipp: rsync nutzt automatisch Deinen SSH-Key aus ~/.ssh/config.
Achtung --delete: Dateien, die im Quell-Ordner fehlen, werden auf dem Zielserver gelöscht. Erst ohne --delete testen — dann einsetzen, wenn Du sicher bist, dass Quelle und Ziel identisch sein sollen.

4 Wann was?

📄 scp
  • Einzelne Dateien schnell hoch-/runterladen
  • Einfachste Syntax, kein extra Befehlssatz
  • Kein Fortsetzen nach Abbruch
📂 sftp
  • Verzeichnis interaktiv durchsuchen
  • Mehrere Dateien in einer Sitzung
  • Komfortabel zum Erkunden unbekannter Server
rsync für alles, was sich wiederholt: Deploys, Backups, Ordner-Spiegelungen. Es überträgt nur das Delta und ist damit viel schneller als scp bei großen Ordnern.

✓ Geschafft, wenn Du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 6

Tunnel & Port-Forwarding

Ports durch den verschlüsselten SSH-Kanal leiten — Datenbanken, Web-UIs und Proxys sicher erreichbar machen.

1 Mentales Modell

Ein SSH-Tunnel verbindet einen Port auf einer Seite durch den verschlüsselten Kanal mit einem Port auf der anderen.

SSH-Tunnel — Schematisch
Skizze
Lokaler Port 8080 → SSH-Kanal → Port 80 auf dem Server. Kein offener Port nach außen nötig.

2 Lokal -L — Serverdienst lokal erreichbar machen

Du öffnest einen Port auf deinem Rechner, der auf einen Port des Servers tunnelt.

1Lokales Port-Forwarding -L
# Lokaler Port 8080 → Port 80 auf dem Server
ssh -L 8080:localhost:80 meinserver

# Use-Case: Remote-Datenbank lokal in der DB-GUI benutzen
# (PostgreSQL nur auf Server-localhost gebunden)
ssh -L 5432:localhost:5432 meinserver
Format: -L LOKALER_PORT:ZIEL_HOST:ZIEL_PORT. Danach kannst du localhost:5432 auf deinem Rechner ansprechen — die Verbindung läuft verschlüsselt über SSH.

3 Remote -R — Lokalen Dienst vom Server aus erreichbar machen

Umgekehrt: Du öffnest einen Port auf dem Server, der zu einem lokal laufenden Dienst tunnelt.

2Remote Port-Forwarding -R
# Server-Port 9000 → lokaler Port 3000 (lokal laufende App)
ssh -R 9000:localhost:3000 meinserver
Format: -R SERVER_PORT:ZIEL_HOST:ZIEL_PORT. Nützlich zum Testen: Webhook-Dienste oder lokale Web-Apps vom Server aus erreichbar machen.

4 Dynamisch -D — SOCKS-Proxy

Statt eines einzelnen Ports richtest du einen lokalen SOCKS-Proxy ein — z. B. um den Browser über den Server zu tunneln.

3Dynamisches Port-Forwarding -D (SOCKS)
# Lokaler SOCKS5-Proxy auf Port 1080
ssh -D 1080 meinserver
Im Browser-Proxy-Dialog: SOCKS5 · localhost · 1080. Danach läuft der Browser-Traffic verschlüsselt über den Server. Praktisch für geografisch eingeschränkte Dienste oder sichere Verbindungen aus fremden Netzwerken.

5 Tunnel im Hintergrund

-N und -f kombinieren: -N öffnet keinen Shell-Befehl, nur den Tunnel. -f schickt den Prozess in den Hintergrund. Zusammen: dauerhafter Hintergrund-Tunnel ohne offenes Terminal-Fenster.
4Hintergrund-Tunnel
# Tunnel im Hintergrund starten (kein Shell, kein offenes Fenster)
ssh -fNL 8080:localhost:80 meinserver

# Tunnel beenden: PID finden und killen
pkill -f "ssh -fNL 8080"

✓ Geschafft, wenn du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 7

Sprungserver & Profi-Tricks

Über Zwischensysteme springen, den SSH-Agent weiterreichen und Verbindungen wiederverwenden.

1 ProxyJump — über einen Sprungserver

Wenn ein Zielrechner nicht direkt erreichbar ist, verbindest du dich über einen Sprungserver (Bastion Host) dazwischen.

1ProxyJump auf der Kommandozeile
# Eine Verbindung: lokal → jumphost → ziel
ssh -J jumphost user@ziel
2ProxyJump in ~/.ssh/config (dauerhaft)
Host ziel
    HostName   10.0.0.5
    User       max
    ProxyJump  jumphost
Danach reicht ssh ziel — SSH springt automatisch über jumphost. Mehrere Hops möglich: ProxyJump hop1,hop2.

2 Agent-Forwarding

Der SSH-Agent auf deinem Rechner hält deinen entschlüsselten Schlüssel. Mit Forwarding kannst du ihn auf dem Sprungserver nutzen — ohne dort eine Kopie des privaten Schlüssels abzulegen.

3Agent-Forwarding aktivieren
# Einmalig mit -A
ssh -A meinserver

# Dauerhaft in ~/.ssh/config
Host meinserver
    ForwardAgent yes
Sicherheitshinweis: Ein kompromittierter Zwischenserver kann den weitergeleiteten Agent missbrauchen — so lange die Verbindung besteht. Agent-Forwarding nur auf Hosts einschalten, denen du vollständig vertraust. Nie pauschal ForwardAgent yes für alle Hosts setzen.

3 Multiplexing — schnellere Folge-Verbindungen

SSH kann mehrere Verbindungen über einen einzelnen Kanal laufen lassen. Folge-Verbindungen zu demselben Host öffnen sofort — ohne erneuten Handshake.

4Multiplexing in ~/.ssh/config
Host *
    ControlMaster   auto
    ControlPath     ~/.ssh/cm-%r@%h:%p
    ControlPersist  10m
ControlMaster auto: erste Verbindung öffnet den Master-Socket. Folge-Verbindungen nutzen ihn. ControlPersist 10m: Socket bleibt 10 Minuten nach dem letzten Close offen — perfekt für häufige rsync/scp-Aufrufe im Deployment.

✓ Geschafft, wenn du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 8

SSH für Git

Schlüssel bei GitHub, GitLab & Co. hinterlegen, mehrere Konten verwalten und Deploy-Keys sicher einsetzen.

1 Öffentlichen Schlüssel hinterlegen

Einmal eingerichtet, entfällt das Passwort bei jedem git push und git clone.

  1. Öffentlichen Schlüssel anzeigen: cat ~/.ssh/id_ed25519.pub — gesamten Inhalt kopieren.
  2. Bei GitHub: Settings → SSH and GPG keys → New SSH key. Titel vergeben, Inhalt einfügen, speichern.
  3. Bei GitLab: Preferences → SSH Keys → Add new key. Gleicher Ablauf.
  4. Bei Forgejo / Gitea: User Settings → SSH / GPG Keys → Add Key.

2 Verbindung testen

1SSH-Verbindung zu GitHub testen
ssh -T git@github.com
Erwartete Antwort: „Hi <user>! You've successfully authenticated, but GitHub does not provide shell access." — das ist korrekt und bedeutet: Schlüssel akzeptiert.
Terminal
ssh -T git@github.com Hi max! You've successfully authenticated, but GitHub does not provide shell access.

3 Klonen via SSH

2Repository per SSH klonen
# SSH-URL (beginnt mit git@, nicht https://)
git clone git@github.com:user/repo.git
SSH-URLs erkennst du am Präfix git@. HTTPS-Klons fragen jedes Mal nach Token/Passwort. SSH nutzt deinen Schlüssel automatisch.

4 Mehrere Keys / Konten

Du hast ein privates und ein Firmen-GitHub-Konto? Für jeden Account einen eigenen Schlüssel anlegen und per Config zuweisen.

3~/.ssh/config — Schlüssel pro Host
# Privates GitHub-Konto
Host github.com
    HostName        github.com
    User            git
    IdentityFile    ~/.ssh/id_ed25519_github

# Firmen-Account via Alias
Host github-firma
    HostName        github.com
    User            git
    IdentityFile    ~/.ssh/id_ed25519_github_firma
Für Repos des Firmen-Accounts dann als Remote git@github-firma:firma/repo.git verwenden — SSH wählt automatisch den richtigen Schlüssel.

5 Deploy-Keys

Deploy-Keys sind repo-spezifische Schlüssel — häufig read-only — die du auf einem Server hinterlegst, damit er Deploys autonom ausführen kann. Vorteil: der Schlüssel hat nur Zugriff auf ein einzelnes Repository, nicht auf alle Repos des Accounts. In GitHub unter Repo → Settings → Deploy keys hinterlegen.
Mehr zu Git selbst? Git in der IDE — von Commits über Branches bis zu Claude-Code-Integration.

✓ Geschafft, wenn du …

Versionsstand: OpenSSH 9.x · Stand Juni 2026

Stufe 9

Server härten

Passwort-Auth abschalten, fail2ban aktivieren und die Firewall richtig einstellen — Schritt für Schritt, ohne sich auszusperren.

1 Zuerst: zweite Session offen lassen!

Wichtig vor dem Härten: Öffne eine zweite SSH-Session zu deinem Server und lasse sie offen. Teste den Key-Login in dieser zweiten Session, bevor du Passwort-Auth abschaltest. Wenn etwas schiefgeht und du die erste Session schließt, kommst du sonst nicht mehr rein — und brauchst VNC/Rescue-Konsole des Hosters.

2 sshd_config anpassen

Die zentrale Konfigurationsdatei des SSH-Servers. Editiere sie mit Root-Rechten.

1/etc/ssh/sshd_config — wichtigste Einstellungen
# Root-Login verbieten
PermitRootLogin        no

# Public-Key-Auth sicherstellen
PubkeyAuthentication   yes

# Passwort-Auth deaktivieren — NUR nachdem Key-Login funktioniert!
PasswordAuthentication no
Nach der Änderung SSH-Server neu laden. Nicht neu starten — reload hält bestehende Verbindungen offen.
2sshd neu laden (Debian/Ubuntu)
sudo systemctl reload ssh

# Auf anderen Systemen (CentOS, RHEL, Fedora):
sudo systemctl reload sshd

3 fail2ban — Schutz vor Brute-Force

fail2ban überwacht Log-Dateien und sperrt IPs automatisch, die zu viele fehlgeschlagene Login-Versuche machen.

3fail2ban installieren (Debian/Ubuntu)
sudo apt install fail2ban
Der SSH-Jail (sshd) ist nach der Installation standardmäßig aktiv — keine weitere Konfiguration nötig für den Basis-Schutz. Status prüfen: sudo fail2ban-client status sshd.

4 Port ändern — pro und contra

Port ändern (z. B. 2222): Reduziert das Log-Rauschen durch automatisierte Scanner erheblich — aber es ist „Security by Obscurity" und kein echter Schutz. Wer deinen Server gezielt scannt, findet den Port trotzdem. Wenn du den Port änderst: Firewall-Regel anpassen und in ~/.ssh/config den neuen Port eintragen (Port 2222).
4Port in /etc/ssh/sshd_config (optional)
Port 2222

5 Firewall einrichten (ufw)

5ufw — SSH und nötige Dienste erlauben
# SSH erlauben (Standard-Port 22)
sudo ufw allow 22/tcp

# Oder bei geändertem Port:
sudo ufw allow 2222/tcp

# Weitere Dienste nach Bedarf
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Firewall aktivieren
sudo ufw enable

# Status prüfen
sudo ufw status verbose
Reihenfolge beachten: SSH-Port erlauben, dann ufw enable — sonst sperrst du dich sofort aus.

6 Härtungs-Checkliste

✓ Alles erledigt, wenn …

Versionsstand: OpenSSH-Server / sshd · Stand Juni 2026

SSH im Kontext eines kompletten Server-Setups: Self-Hosting & VPS — von VPS mieten bis n8n und Monitoring.
Bonus

SSH Cheat-Sheet

Die wichtigsten SSH-Befehle auf einen Blick. (Zählt nicht für den Fortschritt.)

Verbinden

1Verbindung aufbauen
# Standard-Login
ssh user@host

# Bestimmter Port
ssh -p 2222 user@host

# Mit explizitem Key
ssh -i ~/.ssh/id_ed25519 user@host

🔑 Keys

2Schlüssel erzeugen & übertragen
# Ed25519-Schlüsselpaar erzeugen (empfohlen)
ssh-keygen -t ed25519 -C "kommentar"

# Öffentlichen Schlüssel auf Server übertragen
ssh-copy-id user@host

# Öffentlichen Schlüssel anzeigen (für GitHub/GitLab)
cat ~/.ssh/id_ed25519.pub

Config-Snippet

3~/.ssh/config — Host-Alias
Host meinserver
    HostName     203.0.113.10
    User         user
    IdentityFile ~/.ssh/id_ed25519
    Port         22

📂 Dateitransfer

4scp & rsync
# Datei hochladen (scp)
scp datei.txt user@host:/ziel/

# Datei herunterladen (scp)
scp user@host:/pfad/datei.txt .

# Ordner synchronisieren (rsync)
rsync -avz ordner/ user@host:/ziel/

🔀 Tunnel

5Port-Forwarding
# Lokal: Server-Port 80 als localhost:8080 erreichbar
ssh -L 8080:localhost:80 meinserver

# Remote: lokaler Port 3000 auf Server-Port 9000 legen
ssh -R 9000:localhost:3000 meinserver

# Dynamisch: lokaler SOCKS-Proxy auf Port 1080
ssh -D 1080 meinserver

# Hintergrund-Tunnel (kein Shell, bleibt offen)
ssh -fNL 8080:localhost:80 meinserver

🏃 Sprung & Git

6ProxyJump · Git-Test · known_hosts
# Über Sprungserver verbinden
ssh -J jumphost user@ziel

# SSH-Verbindung zu GitHub testen
ssh -T git@github.com

# Veralteten Host-Key entfernen (nach Server-Neuinstallation)
ssh-keygen -R host
Lernkontrolle

Quiz

7 Fragen quer durch die SSH-Stufen. Ab 6 richtigen Antworten schaltest du dein Zertifikat frei.

Frage 1 von 7
Abschluss

Dein Zertifikat

Glückwunsch! Trage deinen Namen ein und drucke das Zertifikat (oder speichere als PDF).

FL
Florian Ludwig
AI Consultant · Kutzschbach INNOVATIONS
Zertifikat
SSH von Anfang an
Hiermit wird bestätigt, dass
Dein Name hier
den Workshop „SSH von Anfang an — sicher auf entfernte Rechner" erfolgreich abgeschlossen hat.
Datum
GEPRÜFT
Florian LudwigAI Consultant · Kutzschbach INNOVATIONS