После запуска tomcat с включенной jpda, в моей компании я могу удаленно отлаживать несколько веб-приложений в eclipse. По ряду причин я сейчас нуждаюсь в разработке и удаленной отладке тех же самых веб-приложений за пределами брандмауэра компании, и я могу получить доступ к этому серверу только через ssh через порт 22.
Я направил наиболее необходимые порты (svn, nexus, tomcat сам, с сервера или через сервер) на localhost, и эти службы работают нормально, но я не могу запустить отладчик eclipse; я получаю сообщение "Тайм-аут соединения во время ожидания пакета XXX" или "соединение отклонено" со второго раза, когда я пытаюсь.
Проверяя с помощью nmap на сервере, он сообщает об открытии порта до первой попытки подключения и после этого становится закрытым. Я не получаю интересный выходной журнал в catalina.out
Команда, которую я использую для запуска туннеля:
ssh -L 8000:localhost:8000 user@mycompany.com
iptables был временно остановлен как на сервере, так и на локальном компьютере для тестирования.
Я что-то упустил? Нужно ли перенаправить какой-нибудь другой порт на локальный хост? Или это каким-то образом связано с разрешением имен?
EDIT
Открыть порты перед попыткой подключения из 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)
и после:
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)
ошибка точного затмения:
Exception occurred during launch
Failed to connect to remote JVM. Connection timed out.
Timeout occurred while waiting for packet 204.
(номер пакета меняется при каждой попытке).
в workspace/.metadata/.log
я получаю:
!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 настроен для прямого подключения к интернету.
РЕДАКТИРОВАТЬ 2
Я думаю, что решение может быть здесь:
http://blog.cantremember.com/debugging-with-jconsole-jmx-ssh-tunnels/
но у меня возникли проблемы с пониманием его настроек JNDI / RMI и степени, в которой это применимо к моей конфигурации.
РЕДАКТИРОВАТЬ 3
Это пояснение для тех, кто отвечает «используйте <lan|local ip address>
вместо <localhost>
»
- компьютер A: моя рабочая станция в компании
- компьютер B: моя рабочая станция дома
- компьютер C: сервер, на котором запущен tomcat
B и C находятся в двух разных подсетях в одной сетевой инфраструктуре; разрешены только подключения к порту 22 C снаружи (и несколько «прокси», я не знаю, что такое внутренние сети).
A "снаружи" (мое соединение dsl с динамическим IP-адресом).
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