Eclipse: Remote-Debugging eines Tomcat-Servers hinter einer Firewall
Nach dem starten von tomcat mit jpda auf, während in meiner Firma kann ich das remote-debug-ein Bündel von web-Anwendungen in eclipse. Für eine Reihe von Gründen, ich bin jetzt in der Notwendigkeit von Entwicklungs-und remote-debugging die gleichen webapps von außerhalb der Unternehmens-firewall, und ich kann nur Zugriff auf diesen server über ssh auf port 22.
Ich getunnelt meisten benötigten ports (svn, nexus, tomcat selbst, vom server oder über den server) localhost und diese Dienste funktionieren, aber ich kann nicht starten Sie den eclipse-debugger in keiner Weise; ich bin immer "connection timed out while waiting for packet-XXX" oder "connection refused" ab dem zweiten mal, wenn ich versuche auf.
Prüfung mit nmap auf dem server, meldet es der port offen ist, vor dem ersten Verbindungsversuch, und es wird geschlossen, dass nach. Ich bekomme keine interessanten output-log-in catalina.aus
Den Befehl, den ich verwenden, um den tunnel ist:
ssh -L 8000:localhost:8000 user@mycompany.com
iptables wurde vorübergehend angehalten, sowohl auf dem server und auf dem lokalen Computer zum testen.
Bin ich etwas fehlt? Muss ich vorn paar anderen port auf localhost? Oder ist es in irgendeiner Weise beteiligt Namensauflösung?
BEARBEITEN
Offenen ports vor dem Verbindungsversuch von eclipse:
root@lnxulisse:/opt/apache-tomcat-6.0.32/bin# lsof -p 2147 -n |grep TCP
java 2147 root 4u IPv4 640850 0t0 TCP *:8000 (LISTEN)
java 2147 root 38u IPv6 640859 0t0 TCP *:http-alt (LISTEN)
java 2147 root 40u IPv6 640865 0t0 TCP *:https (LISTEN)
java 2147 root 46u IPv6 640908 0t0 TCP 127.0.0.1:18005 (LISTEN)
java 2147 root 48r IPv6 642625 0t0 TCP 172.24.0.82:48347->172.24.0.82:mysql (ESTABLISHED)
java 2147 root 181u IPv6 640891 0t0 TCP 172.24.0.82:60353->172.24.0.82:mysql (ESTABLISHED)
und nach:
java 2147 root 4u IPv6 642769 0t0 TCP 172.24.0.82:48956->172.24.0.82:mysql (ESTABLISHED)
java 2147 root 5u IPv4 640851 0t0 TCP 127.0.0.1:8000->127.0.0.1:34193 (ESTABLISHED)
java 2147 root 38u IPv6 640859 0t0 TCP *:http-alt (LISTEN)
java 2147 root 40u IPv6 640865 0t0 TCP *:https (LISTEN)
java 2147 root 46u IPv6 640908 0t0 TCP 127.0.0.1:18005 (LISTEN)
java 2147 root 181u IPv6 640891 0t0 TCP 172.24.0.82:60353->172.24.0.82:mysql (ESTABLISHED)
genaue eclipse zurückgegebene Fehler ist:
Exception occurred during launch
Failed to connect to remote JVM. Connection timed out.
Timeout occurred while waiting for packet 204.
(die Paket-Anzahl variiert in jedem Versuch).
in workspace/.metadata/.log
ich bekommen:
!ENTRY org.eclipse.osgi 2 0 2011-07-17 18:43:53.024
!MESSAGE While loading class "org.eclipse.core.net.proxy.IProxyService", thread "Thread[main,6,main]" timed out waiting (5000ms) for thread "Thread[Thread-6,5,main]" to finish starting bundle "org.eclipse.core.net_1.2.1.r35x_20090812-1200 [232]". To avoid deadlock, thread "Thread[main,6,main]" is proceeding but "org.eclipse.core.net.proxy.IProxyService" may not be fully initialized.
!STACK 0
org.osgi.framework.BundleException: State change in progress for bundle "reference:file:plugins/org.eclipse.core.net_1.2.1.r35x_20090812-1200.jar" by thread "Thread-6".
at org.eclipse.osgi.framework.internal.core.AbstractBundle.beginStateChange(AbstractBundle.java:1073)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:278)
[...]
!ENTRY org.eclipse.ui.ide 4 4 2011-07-17 18:43:53.028
!MESSAGE Proxy service could not be found.
eclipse konfiguriert ist für die direkte internet-Verbindung.
EDIT 2
Ich glaube, die Lösung könnte hier sein:
http://blog.cantremember.com/debugging-with-jconsole-jmx-ssh-tunnels/
aber ich habe einige Schwierigkeiten zu verstehen, seine JNDI/RMI-Einstellungen, und in welchem Umfang die bezieht sich auf meine Konfiguration.
EDIT 3
Dies ist eine Klarstellung für die Beantwortung "verwenden <lan|local ip address>
statt <localhost>
"
- computer Ein: meine workstation in der Firma
- Rechner B: mein Arbeitsplatz zu Hause
- - computer-C: - server mit tomcat
B und C sind in zwei verschiedenen sub-Netzwerke in der gleichen Netzwerk-Infrastruktur; nur verbindungen zu port 22, der C von außen sind erlaubt (und etwas "umgeleitet" wird, weiß ich nicht-Netzwerk-Interna).
Einem "außerhalb" (meine dsl-Verbindung mit dynamischer ip-Adresse).
Debugging on C from B via ssh tunnel -> works
Debugging on C from A via ssh tunnel -> connection timed out while waiting for packet XXX
InformationsquelleAutor der Frage | 2011-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Artikel deutet darauf hin, dass der Standard-port, auf dem der remote Java virtual machine (JVM) ist das hören im debugging-Modus ist 1044. Sie sollten tunnel-port, auf dem die remote JVM ausgeführt wird.
Mehr allgemein, man könnte wireshark/tcpdump zu sehen, zu welchem port Verbindung versucht wird, beim starten des debugger.
BEARBEITEN:
Ein paar mehr Dinge, die ich versuchen würde:
ps auxwww
wenn es Linux ist) mit welchen Argumenten (für das, was kommt hinter-Xrunjdwp
oder mitlsof -p PID_OF_JVM_TO_BE_DEBUGGED
auf welchem TCP-port lauscht (suchen Sie nach Zeilen, die mitTCP
undLISTEN
imlsof
Ausgabe)lo
Schnittstelle, nicht die Netzwerk-Schnittstelle (das ist, was Sie mit denlocalhost
im-L
option, um ssh).jdb -attach localhost:8000
Arbeit ? (Sie könnten auch versuchen, diese auf dem remote-host, um sicherzustellen, der debugger läuft auf dem port 8000)localhost
(wenn nicht die Angabe eines bind-Adresse, bevor die ersten 8000 mit der-L
option ssh lauscht auflo
interface)InformationsquelleAutor der Antwort Andre Holzner
Hatte ich oft das problem, wenn Sie remote-debugging. Ich weiß nicht, den genauen Grund für dieses problem, aber ich habe die unten Lösung und vielleicht funktioniert es auch für Sie:
statt
verwendet wird
für die Erstellung des SSH-tunnel (beachten Sie die remotehost-Rechner statt "localhost" zwischen den port-Nummern im zweiten Beispiel). Statt der remote-host-Namen, Sie können auch die normale IP-Adresse des remote-host (nicht der loopback-Adresse 127.0.0.1, aber die wahre lokale Netzwerk-IP-Adresse).
Hoffe es hilft und viel Glück!
InformationsquelleAutor der Antwort Daniel S.
Vorausgesetzt, die remote-Tomcat-Instanz gestartet wurde, mit etwas wie
-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n
folgenden Befehl versuchen:Auf meinem Mac, die ich ausprobiert
ssh -L 10701:localhost:10700 user@localhost -N
lokal, wo ein Tomcat-Instanz gestartet wurde mit-Xrunjdwp:transport=dt_socket,server=y,address=10700,suspend=n
und versuchen zu befestigen, auf port 10701 innerhalb von Eclipse, ich sah immer wieder "Failed to connect to remote VM-com.Sonne.jdi.verbinden.spi.ClosedConnectionException". Durch die änderung der tunnel-Befehl, umssh -L 10701:0.0.0.0:10700 user@localhost -N
Eclipse war in der Lage zu befestigen.InformationsquelleAutor der Antwort Daniel Trebbien
Können Sie bitte die genauen Parameter von die -Xrunjdwp parameter?
Außerdem haben Sie versucht, verschiedene Methoden für das Debuggen (server=y/n, suspend=y/n)?
Vielleicht inversing die Verbindung (lassen Sie die tomcat-Verbindung zum debugger, anstatt zuzulassen, dass der debugger die Verbindung zum tomcat) kann helfen.
InformationsquelleAutor der Antwort Uwe Plonus
Gut, beantworte ich mir selbst nach einer langen Zeit, in meinem speziellen Fall war die Lösung zu setzen eclipse JVM im listening-Modus:
und die Umkehrung der Richtung des Tunnels:
Einige Erläuterungen: wie in der Frage, meine situation war:
Beim Rückwärtsfahren so:
war der trick. In anderen Worten, was hier geschrieben steht, auf S:8001, wird an W:8001, und was wiederum ist geschrieben W:8001, an H:8001, wo mein eclipse JVM überwacht wird.
Den tomcat-JVM auf S gestartet werden soll mit server=n, mit den Argumenten:
InformationsquelleAutor der Antwort ᴳᵁᴵᴰᴼ