Du willst dich per SSH auf eine Maschine verbinden, zu der du keine Verbindungen annehmen kannst: einen Heim-Server hinter deinem Router, einen Raspberry Pi im Büro, eine Kiste an einem Mobilfunk- oder 5G-Anschluss. Die alte Antwort – Port 22 am Router weiterleiten – steht immer seltener zur Verfügung, und wo es sie gibt, ist sie eine schlechte Idee. Dieser Beitrag geht die vier Ansätze durch, die tatsächlich funktionieren, was jeder dich kostet und je ein durchgespieltes Beispiel. Keiner davon öffnet einen eingehenden Port auf der Maschine, die du erreichst.
Warum du nicht mehr einfach einen Port weiterleiten kannst
Zwei Dinge stehen im Weg. Erstens Carrier-grade NAT (CGNAT): Die meisten Glasfaser-, Kabel-, Mobilfunk- und Starlink-Anschlüsse zu Hause teilen sich heute eine öffentliche IP über viele Kunden hinweg, es gibt also keinen Port an „deiner“ Adresse, den du weiterleiten könntest – der Router, den du kontrollierst, ist nicht der mit der öffentlichen IP. Zweitens: Selbst mit einer echten öffentlichen IP wird ein weitergeleiteter SSH-Port von Scannern binnen Minuten gefunden; die Logs füllen sich ab der ersten Sekunde mit Brute-Force-Versuchen. Die Lösung sieht in jedem Fall unten gleich aus: Die private Maschine baut eine ausgehende Verbindung zu etwas Erreichbarem auf, und du reist über diese Verbindung zurück herein. Ausgehend funktioniert sogar durch CGNAT und abgeriegelte Firewalls, denn es ist nur eine weitere Verbindung, die das Netz verlässt.
Die vier Optionen auf einen Blick
| Ansatz | Was du betreibst | Zusätzliche Infrastruktur | Langlebiger Schlüssel auf der Kiste? | Am besten für |
|---|---|---|---|---|
| Reverse-SSH-Tunnel | ssh -R + autossh auf der Kiste | ein VPS mit öffentlicher IP | ja (zum VPS) | du mietest schon einen VPS |
| Mesh-VPN (Tailscale / WireGuard) | ein VPN-Client auf beiden Seiten | ein Koordinierungsdienst | dein normaler SSH-Schlüssel | mehrere Maschinen erreichen |
| Cloudflare Tunnel | cloudflared auf der Kiste | ein Cloudflare-Konto + Domain | dein normaler SSH-Schlüssel | du nutzt schon Cloudflare |
| Ausgehender Connector | ein kleiner Agent auf der Kiste | ein Termalin-Konto | nein – kurzlebiges Zertifikat | Browser-Zugriff, kein VPS oder VPN |
Die ersten drei geben dir ein normales ssh you@… von deinem Laptop. Der letzte erreicht die Kiste stattdessen aus einem Browser oder von einem KI-Agenten. Lies weiter, welcher passt.
Option 1 – Reverse-SSH-Tunnel über einen VPS
Wenn du schon einen günstigen VPS mit öffentlicher IP mietest, kann die private Kiste sich zu ihm hinauswählen und ihren eigenen SSH-Port zurückleiten. Auf der Kiste hinter NAT:
ssh -N -R 2222:localhost:22 tunnel@vps.example.com
Das öffnet Port 2222 auf dem VPS und leitet jede Verbindung dorthin zurück an Port 22 der Heim-Kiste. Von überall springst du durch den VPS, um auf der Kiste zu landen:
ssh -J tunnel@vps.example.com -p 2222 you@localhost
Ein nacktes ssh -R stirbt beim ersten Schluckauf des Netzes, umhülle es also mit autossh unter einer systemd-Unit, damit es Reboots und Abbrüche übersteht, und ergänze -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes. Die vollständige Mechanik – inklusive des GatewayPorts-Stolpersteins und warum der Tunnel standardmäßig an das Loopback des VPS bindet – steht in SSH-Reverse-Tunnel, erklärt. Abwägung: Du pflegst einen VPS und einen langlebigen Schlüssel auf der Kiste, der ihn erreichen kann, und dieser VPS ist jetzt Teil deiner Angriffsfläche.
Option 2 – Ein Mesh-VPN (Tailscale oder WireGuard)
Statt einen Port freizulegen, stell beide Maschinen in ein privates Netz, das nur sie sehen. Tailscale ist die aufwandsarme Variante. Auf der Kiste hinter NAT:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Installiere Tailscale auch auf deinem Laptop, und beide bekommen eine stabile 100.x.y.z-Adresse (und einen MagicDNS-Namen). Dann reicht:
ssh you@home-box
als wärst du im selben LAN – die Kiste ist dem öffentlichen Internet überhaupt nie ausgesetzt. sudo tailscale up --ssh kann dir sogar die SSH-Authentifizierung abnehmen, sodass du dafür keine Schlüssel verwaltest. WireGuard ist dieselbe Idee von Hand gebaut: Du betreibst die Koordination selbst und konfigurierst Peers manuell – mehr Arbeit, kein Koordinator von dritter Seite. Für ein Homelab mit einem NAS und ein paar Pis ist ein Mesh-VPN meist die ganze Antwort, und es ist die Voreinstellung, zu der ich im Heim-NAS-/Server-Leitfaden greife. Abwägung: Jedes Gerät, das Zugriff braucht, muss dem Netz beitreten, also ein Client zum Installieren und ein Konto zum Betreiben.
Option 3 – Cloudflare Tunnel
Wenn deine Domain schon bei Cloudflare liegt, gibt dir cloudflared einen ausgehenden Tunnel ohne offenen Port. Auf der Kiste:
cloudflared tunnel login
cloudflared tunnel create home
Route einen Hostnamen auf den Tunnel und richte ihn in der Tunnel-Konfiguration auf das lokale sshd (ssh://localhost:22), dann betreib cloudflared als Dienst. Auf der Client-Seite erreicht SSH ihn über ein ProxyCommand in deiner ~/.ssh/config (auf Englisch):
Host ssh.example.com
ProxyCommand cloudflared access ssh --hostname %h
Jetzt fließt ssh you@ssh.example.com über Cloudflares Edge zur Kiste. Der kostenlose Tarif deckt das ab. Abwägung: Du routest dein SSH über einen Dritten und machst dich von einem Cloudflare-Konto und einer dort gehosteten Domain abhängig – großartig, wenn du das ohnehin tust, Overkill, wenn nicht.
Option 4 – Ein ausgehender Connector (kein VPS, kein VPN)
Die drei Optionen oben verlangen jeweils stehende Infrastruktur – einen VPS, ein VPN oder eine Cloudflare-Domain. Termalins Connector schrumpft das auf einen Befehl und erreicht die Kiste aus deinem Browser, der Termalin-App oder von einem KI-Agenten statt mit einem lokalen ssh. Auf dem privaten Server installiert eine Zeile einen kleinen statischen Agenten (Linux x86_64 und arm64):
curl -fsSL https://termal.in/tunnel-install.sh | sudo TERMALIN_TOKEN=<token> sh
Der Agent wählt sich über einen einzigen WebSocket zu Termalin hinaus und hält ihn offen; er lauscht nie auf einem Port. Wenn du im Web-Client ein Terminal öffnest, läuft die Anfrage über diese Verbindung, und der Agent verbindet sich mit dem eigenen sshd der Kiste auf localhost – er bewegt nur undurchsichtige SSH-Bytes, sieht also nie deine Zugangsdaten oder den Klartext der Sitzung. Durch das Anbinden vertraut das sshd der Kiste Termalins SSH-Zertifizierungsstelle, sodass Logins ein kurzlebiges Zertifikat nutzen statt eines langlebigen privaten Schlüssels, der auf dem Server liegt. Das ist die eine Zeile in der Tabelle mit „nein“ unter langlebiger Schlüssel auf der Kiste.
Der Haken, klar gesagt: Du erreichst die Kiste über Termalins gehostete Seite – das Web-Terminal, die Termalin-Apps für Desktop und iOS (die über dasselbe Gateway verbinden) oder einen KI-Agenten über den MCP-Server – nicht mit einem nackten ssh-Befehl von deiner eigenen Maschine, und der Connector gehört zum kostenpflichtigen Tarif (oder der Testphase). Wenn du ein normales Terminal von deinem Laptop willst, passen die Optionen 1–3 besser. Wenn du Browser-Zugriff von jedem Gerät willst – oder einen Agenten auf einer Kiste arbeiten lassen willst, die keine öffentliche Adresse und keinen Schlüssel zum Stehlen hat –, ist das die dafür gebaute Option. Derselbe ausgehende Connector trägt auch schlankes Monitoring und Alarme für eine Kiste ohne offenen Port.
Welchen solltest du wählen?
- Du mietest schon einen VPS: Der Reverse-Tunnel nutzt ihn weiter – ein
ssh -Runter autossh, und du bist fertig. - Du hast mehr als eine Maschine zu erreichen oder willst, dass sie sich wie ein LAN anfühlen: Ein Mesh-VPN wie Tailscale skaliert am besten und legt nichts offen.
- Deine Domain liegt bei Cloudflare: Ihr Tunnel passt natürlich und ohne neuen Anbieter.
- Du willst null stehende Infrastruktur, Browser-Zugriff oder beaufsichtigten Agenten-Zugriff: ein ausgehender Connector, ohne langlebigen Schlüssel auf dem Server.
Alle vier teilen das eine Prinzip, das man sich merken sollte: Öffne nie einen eingehenden Port auf einer Maschine, die du dir nicht gescannt leisten kannst. Lass sie stattdessen hinausgreifen – diese eine Richtungsumkehr ist es, die SSH hinter NAT sicher macht.
Termalin ist ein kostenloser, plattformübergreifender SSH-Client mit gespeicherten Tunneln, einem Web-Terminal und einem schlüssellosen Connector für private Server – lade es herunter oder sieh, wie es deine Schlüssel sicher verwahrt.