IDE
{ }
PhpStorm · SSH · Remote Development · SFTP · Xdebug
Remote Development und SSH-Workflows in PhpStorm
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.

17 Min. Lesezeit SSH · SFTP · Remote SDK · Xdebug · Gateway Hosts · JetBrains Remote PhpStorm 2025 · Linux-Server · Docker · Staging

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?
Bei SFTP liegt Code lokal und wird synchronisiert. JetBrains Remote Dev: IDE-Backend und Code komplett auf dem Server, lokaler Client ist nur Thin-Client-Oberfläche.
2Xdebug hinter NAT – wie?
Reverser SSH-Tunnel: ssh -R 9003:localhost:9003 remote. xdebug.client_host=127.0.0.1 auf dem Server. autossh hält den Tunnel persistent.
3Was ist ControlMaster und warum wichtig?
Erlaubt mehreren SSH-Verbindungen denselben Kanal. PhpStorm öffnet Verbindungen für Interpreter, SFTP und Terminal getrennt – ControlMaster macht alle nach der ersten Verbindung sofort schnell.
4Jump Hosts in PhpStorm unterstützt?
Ja, direkt in SSH-Einstellungen oder über ~/.ssh/config mit ProxyJump. Die ssh_config-Variante funktioniert auch für alle anderen Tools.
5Path-Mappings für Remote-Debugging konfigurieren?
Settings → PHP → Servers. Lokaler Pfad → Remote-Pfad definieren. PhpStorm übersetzt Breakpoints auf Remote-Dateien über diese Mappings.
6SFTP-Upload auf bestimmte Verzeichnisse beschränken?
In Deployment-Einstellungen unter Excluded Paths. Für Magento: var/, generated/, pub/static/ ausschließen. Oder manuellen Upload (Ctrl+Shift+X) statt Auto-Upload nutzen.
7Server-Anforderungen für JetBrains Remote Dev?
Mindestens 4 GB RAM (8 GB für Magento), SSH-Zugang, ausreichend CPU. Kein Desktop-Environment nötig. JetBrains installiert Backend automatisch.
8Magento-Cron-Job auf Remote-Server debuggen?
SSH-Tunnel aktiv halten, Cron mit XDEBUG_TRIGGER=1 starten oder xdebug.start_with_request=yes temporär setzen. PhpStorm fängt die Verbindung ab.
9Performance: lokal vs. Remote-Interpreter?
Remote-Interpreter hat SSH-Latenz pro Tool-Aufruf: 2–5 Sekunden mehr für PHPStan. Für interaktive Analyse lokal besser; Remote ideal für gezielte Runs vor Commits.
10SSH-Tunnel persistent halten?
autossh -M 0 -R 9003:localhost:9003 -N remote. autossh baut den Tunnel bei Abbruch automatisch neu auf. Als Systemd-Service für dauerhaften Betrieb einrichten.

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.