vom SSH-Host bis zum Xdebug-Tunnel
Remote-Entwicklung in PhpStorm ist mehr als SFTP-Upload und Hoffen. Mit dem richtigen SSH-Setup, einem konfigurierten Remote-Interpreter, Port-Forwarding für Xdebug und dem JetBrains-Remote-Development-Modus kann man auf entfernten Servern mit derselben IDE-Erfahrung arbeiten wie lokal.
Inhaltsverzeichnis
- 1. Remote-Entwicklung: typische Szenarien und Anforderungen
- 2. SSH-Verbindung in PhpStorm konfigurieren
- 3. Remote PHP-Interpreter via SSH einrichten
- 4. SFTP-Deployment und automatische Synchronisation
- 5. Xdebug über SSH-Tunnel debuggen
- 6. Jump Hosts und Gateway-Konfigurationen
- 7. JetBrains Remote Development (Backend IDE im Server)
- 8. Remote-Terminal und Werkzeuge im integrierten Terminal
- 9. Remote-Entwicklungsansätze im Vergleich
- 10. Zusammenfassung
- 11. FAQ
1. Remote-Entwicklung: typische Szenarien und Anforderungen
Remote-Entwicklung mit PhpStorm deckt mehrere grundlegend unterschiedliche Szenarien ab. Das häufigste: Ein Magento-2-Staging-Server liegt auf einem Linux-Host, auf dem man Änderungen testen oder direkt debuggen muss, ohne den vollständigen Deploy-Zyklus durchlaufen zu wollen. Ein zweites Szenario: Entwicklung auf einem leistungsstarken Remote-Server statt auf einem schwächeren lokalen Laptop. Ein drittes: Der Code läuft in einem Docker-Container auf einem Remote-Host und der Zugriff erfolgt ausschließlich über SSH.
Die Anforderungen unterscheiden sich je nach Szenario erheblich. Für das Staging-Debugging braucht man einen Remote-Interpreter, Port-Forwarding für Xdebug und möglicherweise SFTP-Sync. Für die vollständige Remote-Entwicklung auf einem Server braucht man entweder das JetBrains Remote Development Backend oder ein gut konfiguriertes SFTP-Mapping mit Remote-Interpreter. Für Docker-auf-Remote-Host kommt ein SSH-Tunnel in den Docker-Socket oder ein dedizierter Docker-Remote-Host hinzu. Jedes dieser Setups hat unterschiedliche Komplexität und unterschiedliche Fehlerquellen.
Der erste Schritt ist immer derselbe: eine stabile SSH-Verbindung mit Public-Key-Authentifizierung, idealerweise über den SSH-Agent mit ForwardAgent, sodass Schlüssel nicht auf dem Remote-Server gespeichert werden müssen. PhpStorm nutzt den OpenSSH-Client des Betriebssystems oder eine eigene SSH-Implementierung – beide können mit ~/.ssh/config arbeiten, sodass einmal definierte Host-Aliase überall verfügbar sind.
2. SSH-Verbindung in PhpStorm konfigurieren
PhpStorm liest die SSH-Konfiguration aus ~/.ssh/config und zeigt bekannte Hosts im SSH-Dialog an. Für eine neue Verbindung navigiert man zu Settings → Tools → SSH Configurations und legt dort Host, Port, Benutzername und Authentifizierungsmethode fest. Die empfohlene Methode ist "OpenSSH config and authentication agent" – das delegiert Schlüsselverwaltung an den SSH-Agent und ermöglicht auch den Einsatz von FIDO2-Schlüsseln und Hardware-Security-Keys, die PhpStorm selbst nicht direkt unterstützt.
Für Hosts hinter einem Jump-Host oder Bastion-Server ist die ProxyJump-Konfiguration in ~/.ssh/config die sauberste Lösung. PhpStorm unterstützt auch direkte Jump-Host-Konfiguration in den SSH-Einstellungen, aber die ssh_config-Variante ist portabler und für alle Tools nutzbar. Wichtig: SSH-Verbindungen in PhpStorm werden pro Funktion neu geöffnet – für Remote-Interpreter, SFTP und Terminal separate Verbindungen. ControlMaster-Multiplexing in ~/.ssh/config reduziert die Latenz bei mehreren gleichzeitigen Verbindungen erheblich.
# ~/.ssh/config — Optimiert für PhpStorm Remote Development
# Multiplexing: mehrere PhpStorm-Verbindungen über einen SSH-Kanal
Host staging-magento
HostName staging.mironsoft.de
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519_mironsoft
ForwardAgent yes
# ControlMaster: Verbindung wiederverwenden (reduziert Latenz)
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
# Keepalive: Verbindung bei Inaktivität halten
ServerAliveInterval 30
ServerAliveCountMax 3
# Jump Host für Hosts hinter Bastion
Host internal-dev
HostName 10.10.1.50
User developer
ProxyJump bastion.mironsoft.de
IdentityFile ~/.ssh/id_ed25519_mironsoft
ForwardAgent yes
Host bastion.mironsoft.de
HostName bastion.mironsoft.de
User jump
Port 2222
IdentityFile ~/.ssh/id_ed25519_bastion
3. Remote PHP-Interpreter via SSH einrichten
Mit einem konfigurierten SSH-Host lässt sich in Settings → PHP → CLI Interpreter → Hinzufügen → SSH Credentials ein Remote-Interpreter definieren. PhpStorm verbindet sich mit dem Server, führt php --version und php -r "phpinfo();" aus und zeigt die erkannte PHP-Version, installierte Extensions und php.ini-Pfade an. Dieser Interpreter kann dann für alle Quality Tools verwendet werden: PHPStan, PHPUnit, PHPCS – sie alle laufen dann auf dem Remote-Host mit der dortigen PHP-Konfiguration.
Für Magento-2-Staging-Server bedeutet das: PHPStan analysiert mit der PHP-Version und den Extensions, die auf dem Staging-Server installiert sind. PHPUnit läuft mit dem Magento-Bootstrap des Remote-Systems. Das eliminiert die häufigste Ursache für Abweichungen zwischen lokaler Entwicklung und Staging. Der einzige Nachteil: Jeder Tool-Aufruf benötigt eine SSH-Verbindung, was Latenz mitbringt. Für interaktive Codeanalyse (PHPStan-Plugin) ist das zu langsam – dort bleibt ein lokaler Interpreter die bessere Wahl. Für gezielte Runs vor dem Commit ist der Remote-Interpreter ideal.
4. SFTP-Deployment und automatische Synchronisation
SFTP-Deployment in PhpStorm ist unter Settings → Build, Execution, Deployment → Deployment konfigurierbar. Man legt einen Server mit SFTP-Verbindung an, definiert das Mapping zwischen lokalem Projektverzeichnis und Remote-Pfad, und aktiviert optional "Automatic Upload on Save". Das bedeutet: Jede gespeicherte Datei wird sofort auf den Remote-Server hochgeladen. In Kombination mit einem Remote-Interpreter, der Code dort ausführt, entsteht ein Workflow, bei dem Änderungen sofort testbar sind.
Die Schwäche dieses Ansatzes: Automatischer Upload auf Save lädt auch Dateien hoch, die man noch nicht committen würde – Halbfertigkeiten, Debugging-Code, temporäre Änderungen. Das ist auf einem Staging-Server mit Live-Daten gefährlich. Besser ist Upload on Explicit Command (Ctrl+Shift+X) oder ein Upload-Profil, das nur bestimmte Verzeichnisse synchronisiert und explizit ausgelöst wird. Für Magento-Projekte empfiehlt sich außerdem, das var/-, generated/- und pub/static/-Verzeichnis vom SFTP-Sync auszuschließen.
5. Xdebug über SSH-Tunnel debuggen
Xdebug funktioniert im "Debug-Host"-Modus: PHP auf dem Remote-Server verbindet sich zur Xdebug-Verbindung zurück zum Entwicklerrechner. Das setzt voraus, dass der Remote-Server den Entwicklerrechner erreichen kann – was hinter NAT oder in Cloud-Umgebungen oft nicht der Fall ist. Die Lösung ist ein reverser SSH-Tunnel: Der lokale Port 9003 (Xdebug-Standard) wird über die SSH-Verbindung an den Remote-Server weitergeleitet, sodass PHP dort sich via localhost:9003 verbinden kann, was durch den Tunnel zurück zur lokalen IDE geht.
Der SSH-Befehl für den reversen Tunnel: ssh -R 9003:localhost:9003 staging-magento. Der Remote-Server verbindet sich dann über localhost:9003, der Tunnel leitet das an den lokalen Port 9003 weiter, wo PhpStorm auf eingehende Xdebug-Verbindungen wartet. In der PHP-Konfiguration auf dem Remote-Server: xdebug.client_host=localhost (nicht die externe IP) und xdebug.client_port=9003. Für PhpStorm: Path-Mappings zwischen Remote-Pfaden und lokalen Pfaden konfigurieren, damit Breakpoints korrekt auf die Remote-Datei gemappt werden.
# xdebug.ini auf dem Remote-Staging-Server (PHP 8.4)
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
; Verbindet zurück zur lokalen IDE via reverser SSH-Tunnel
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.start_with_request=trigger
; Trigger via Cookie: XDEBUG_SESSION=PHPSTORM
; Oder via GET-Parameter: ?XDEBUG_SESSION=PHPSTORM
xdebug.idekey=PHPSTORM
xdebug.log=/var/log/php/xdebug.log
xdebug.log_level=3
# SSH-Befehl für reversen Tunnel (lokal ausführen):
# ssh -R 9003:localhost:9003 -N staging-magento
# -R: Remote-Port 9003 → lokal 9003
# -N: keine Kommandoausführung, nur Tunneling
# Für persistenten Tunnel: autossh -M 0 -R 9003:localhost:9003 -N staging-magento
6. Jump Hosts und Gateway-Konfigurationen
In Unternehmensumgebungen liegt der Entwicklungsserver oft hinter einem Bastion-Host, der der einzige SSH-Eintrittspunkt von außen ist. PhpStorm unterstützt Jump-Host-Konfigurationen direkt in den SSH-Einstellungen: Man definiert einen "Proxy"-SSH-Host, über den die eigentliche Verbindung aufgebaut wird. Das entspricht dem ProxyJump-Parameter in ssh_config. Der Vorteil der ssh_config-Variante: Sie funktioniert auch im integrierten Terminal, für externe Tools und für SFTP-Verbindungen ohne weitere Konfiguration.
Für mehrstufige Proxy-Ketten (Bastion → Intermediate → Target) ist ControlMaster besonders wichtig: Ohne ihn öffnet PhpStorm für jede Funktion (Editor, Remote-Interpreter, SFTP, Terminal) jeweils eine eigene Kette von SSH-Verbindungen. Mit ControlMaster wird die erste Verbindung aufgebaut und alle folgenden nutzen den bestehenden Kanal – das reduziert Verbindungsaufbauzeit von mehreren Sekunden auf Millisekunden und schont den Bastion-Server.
7. JetBrains Remote Development (Backend IDE im Server)
Der JetBrains Remote Development Modus (seit PhpStorm 2022.3) ist ein fundamentaler Paradigmenwechsel: Statt Code lokal zu haben und per SFTP auf den Server zu synchronisieren, läuft das IDE-Backend direkt auf dem Remote-Server. Der Code liegt auf dem Server, die Analyse läuft auf dem Server, der Compiler läuft auf dem Server. Der lokale JetBrains Client ist nur eine Thin-Client-Oberfläche, die Tastatureingaben sendet und Bildschirminhalt empfängt – ähnlich wie RDP, aber für Code-Editing optimiert.
Für Magento-2-Projekte bedeutet das: Autocompletion, PHPStan-Plugin und alle Inspections nutzen direkt die PHP-Installation auf dem Server. Kein Path-Mapping nötig, kein SFTP-Sync, keine Abweichung zwischen lokalem und Remote-Code. Der Remote Development Modus lässt sich über Remote Development im JetBrains Toolbox App starten oder direkt in PhpStorm über File → Remote Development → SSH. Der Server muss erreichbar sein und ausreichend RAM haben (mindestens 4 GB für das IDE-Backend), aber kein X11 oder Desktop-Environment.
8. Remote-Terminal und Werkzeuge im integrierten Terminal
Das integrierte Terminal in PhpStorm kann direkt mit einer SSH-Verbindung als Remote-Shell geöffnet werden. Das ersetzt für viele Tasks das separate Terminal-Fenster. Besonders nützlich in Magento-Projekten: Man kann bin/magento cache:flush oder bin/magento setup:upgrade direkt aus PhpStorm heraus ausführen, ohne in ein anderes Fenster wechseln zu müssen. Das Terminal-Fenster ist in der IDE angedockt und zeigt die Ausgabe direkt neben dem Code.
Für Magento-Deployment-Workflows auf Remote-Servern kann man Remote-Shell-Scripts als External Tools einrichten, die via SSH eine Sequenz von Befehlen ausführen. Das Script läuft dann vollständig remote, die Ausgabe erscheint im Run-Panel von PhpStorm. So lässt sich der vollständige Magento-Deploy-Zyklus (Static Content Deploy, Cache Flush, Setup Upgrade) als Run Configuration mit einem Klick starten, ohne manuell SSH-Befehle eingeben zu müssen.
9. Remote-Entwicklungsansätze im Vergleich
| Ansatz | Code-Ort | IDE-Erfahrung | Geeignet für |
|---|---|---|---|
| SFTP + Remote Interpreter | Lokal + Remote (Sync) | Mittel | Staging-Debugging, CI-Parität prüfen |
| SSH Remote Interpreter | Lokal | Gut (lokal) | Quality Tools mit Remote-PHP |
| JetBrains Remote Dev | Remote | Vollständig | Vollständige Remote-Entwicklung |
| Docker Remote Host | Container (remote) | Gut | Docker-basierte Projekte auf Remote-Host |
| Xdebug via SSH-Tunnel | Remote (Debugging) | Vollständiges Debugging | Staging-Fehler mit vollständigem Debugger |
Für die meisten Magento-2-Entwickler ist eine Kombination optimal: Lokale Entwicklung mit Docker, Remote-Interpreter für Staging-Checks, und Xdebug über SSH-Tunnel für Fälle, in denen ein Staging-spezifischer Bug debuggt werden muss. JetBrains Remote Development ist dann sinnvoll, wenn der lokale Rechner zu schwach für das Projekt ist oder wenn regulatorische Anforderungen verlangen, dass Code nicht lokal gespeichert wird.
Mironsoft
DevOps, Remote-Development-Setups und Magento-2-Infrastruktur
Remote-Entwicklung für euer Team einrichten?
Wir konfigurieren SSH-Verbindungen, Remote-Interpreter, Xdebug-Tunnel und SFTP-Sync für eure PhpStorm-Umgebung – mit Bastion-Host-Support und JetBrains Remote Development für anspruchsvolle Setups.
SSH-Setup
ControlMaster, Jump Hosts, Agent-Forwarding und Multiplexing für schnelle Remote-Verbindungen
Xdebug-Tunnel
Reverser SSH-Tunnel für Staging-Debugging hinter NAT und Firewalls
Remote Dev
JetBrains Remote Development auf leistungsstarken Servern einrichten und absichern
10. Zusammenfassung
Remote-Entwicklung mit PhpStorm reicht von einfachem SFTP-Upload bis hin zu vollständiger JetBrains-Remote-Development-Umgebung, bei der das IDE-Backend auf dem Server läuft. Der gemeinsame Nenner ist eine sauber konfigurierte SSH-Verbindung mit Public-Key-Authentifizierung, ControlMaster-Multiplexing und – wo nötig – Jump-Host-Support. Darauf aufbauend lassen sich Remote-Interpreter für Quality Tools, Xdebug-Tunnel für Staging-Debugging und SFTP-Sync für schnelles Feedback einrichten.
Für Magento-2-Projekte ist die empfohlene Kombination: Lokale Docker-Entwicklung für den täglichen Code-Rhythmus, Remote-Interpreter für Staging-CI-Parität, und Xdebug über SSH-Tunnel für Staging-spezifische Bugs, die lokal nicht reproduzierbar sind. JetBrains Remote Development lohnt sich für Teams, die auf leistungsstarken Remote-Servern entwickeln wollen oder bei denen Code-Lokalität aus Compliance-Gründen nicht möglich ist.
Remote Development in PhpStorm — Das Wichtigste auf einen Blick
SSH-Konfiguration
~/.ssh/config mit ControlMaster, ForwardAgent und ProxyJump für Jump-Hosts. ControlPersist 10m reduziert Verbindungslatenz für alle PhpStorm-Funktionen.
Xdebug-Tunnel
ssh -R 9003:localhost:9003 für reversen Tunnel. xdebug.client_host=127.0.0.1 auf dem Remote-Server. Path-Mappings in PhpStorm konfigurieren.
Remote Interpreter
Settings → PHP → CLI Interpreter → SSH. PHP-Version und Extensions auf dem Remote-Host. Für Quality Tools ideal, für interaktive Analyse zu langsam.
JetBrains Remote Dev
IDE-Backend läuft auf dem Server, lokaler Client ist Thin-Client. Kein SFTP-Sync, kein Path-Mapping. Mindestens 4 GB RAM auf dem Server erforderlich.
11. FAQ: Remote Development und SSH in PhpStorm
1SFTP-Deployment vs. JetBrains Remote Development?
2Xdebug hinter NAT – wie?
3Was ist ControlMaster und warum wichtig?
4Jump Hosts in PhpStorm unterstützt?
5Path-Mappings für Remote-Debugging konfigurieren?
6SFTP-Upload auf bestimmte Verzeichnisse beschränken?
7Server-Anforderungen für JetBrains Remote Dev?
8Magento-Cron-Job auf Remote-Server debuggen?
9Performance: lokal vs. Remote-Interpreter?
10SSH-Tunnel persistent halten?
Remote Development und SSH-Workflows in PhpStorm lassen sich mit der richtigen Konfiguration in einem Docker-Magento-Setup effizient nutzen. Der Schlüssel liegt in stabilen Path-Mappings und einem gut konfigurierten SSH-Tunnel für Xdebug.