JConsole的通过ssh本地端口转发(JConsole over ssh local port

2019-07-20 14:16发布

我希望能够远程连接到具有JMX暴露的Java服务,但它是被防火墙阻止。 我曾尝试使用ssh本地端口转发,但连接失败。 看着Wireshark的,看来,当你尝试与JConsole的连接,它想通过一些临时端口连接到端口9999,这是由防火墙拦截后进行连接。

有没有什么办法让JConsole的,只有通过9999连接或使用代理? 是这篇文章仍然是最好的解决办法 ? 或者说,我失去的东西吗?

Answer 1:

有没有什么办法让JConsole的,只有通过9999连接或使用代理? 是这篇文章仍然是最好的解决方案? 或者说,我失去的东西吗?

是的,这文章是对的。

如果指定服务器上的JMX端口( -Dcom.sun.management.jmxremote.port=#### ),你实际上指定的注册表端口的应用程序。 当您将它连接提供了一个额外的服务器端口JConsole的实际执行所有与工作。 若要转发工作,你需要知道这两个注册表和服务器端口。

像下面这样的东西应该工作运行设置为8000。看到两个注册表和服务器端口,您的应用程序此处了解更多详情 。

-Dcom.sun.management.jmxremote.port=8000
-Dcom.sun.management.jmxremote.rmi.port=8000

顺便说一句,我SimpleJMX库让您轻松设置两个端口,你可以设置他们两个是相同的端口。

所以,一旦你知道你都需要转发端口,您可以设置您的ssh命令。 例如,如果您配置注册表和服务器端口为8000,你会怎么做:

ssh -L 8000:localhost:8000 remote-host

这将创建一个本地端口8000转发到本地主机:远程主机上的8000。 您可以指定多个-L如果您需要转发多个端口参数。 然后,您可以将您的JConsole连接到本地主机:8000,它会适当地连接到远程主机。

另外,如果你的服务器有多个接口,您可能需要设置以下两个变量来获取注册表和服务器端口绑定到右侧接口:

-Djava.rmi.server.hostname=10.1.2.3


Answer 2:

这里有一个更漂亮的方式来做到这一点使用SSH隧道的袜子,因为JConsole的支持SOCKS:

  1. 一些免费的端口(例如7777)上本地创建SSH SOCKS代理:

    SSH-FN -D 7777用户@防火墙主机

  2. 运行JConsole的通过指定的SOCKS代理(如本地主机:7777)和地址JMX服务器(例如本地主机:2147)

    JConsole的-J-DsocksProxyHost =本地主机-J-DsocksProxyPort = 7777的服务:JMX:RMI:/// JNDI / RMI://本地主机:2147 / jmxrmi -J-DsocksNonProxyHosts =

如下面的答案之一提到,从JDK 8u60 +你还需要有-J-DsocksNonProxyHosts=选项,以得到它的工作。



Answer 3:

随着目前几乎所有的JDK版本(7u25或更高版本),现在有可能使用的JConsole和Visual JVM通过SSH很容易( 因为现在你可以绑定JMX单端口 )。

我用下面的JVM参数

-Dcom.sun.management.jmxremote.port=8090
-Dcom.sun.management.jmxremote.rmi.port=8090
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

然后我启动SSH连接

ssh my.javaserver.domain -L 8090:127.0.0.1:8090

之后,我可以从JConsole的连接

远程进程: - >本地主机:8090

和Java VM可视化

右键单击本地 - >添加JMX连接 - >本地主机:8090



Answer 4:

继续SSH袜子方法,使用较新的Java版本(约8u66),你还需要设置socksNonProxyHosts空导致:

jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7777 -J-DsocksNonProxyHosts=


文章来源: JConsole over ssh local port forwarding
标签: java ssh jmx