我希望能够远程连接到公开了 JMX 的 Java 服务,但它被防火墙阻止了。我尝试使用 ssh 本地端口转发,但连接失败。查看wireshark,当您尝试连接jconsole时,它似乎在连接到端口9999后希望通过一些临时端口进行连接,这些端口被防火墙阻止。
有没有办法让jconsole只能通过9999连接或者使用代理?是这篇文章仍然是最好的解决方案 https://web.archive.org/web/20150202095729/https://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx?或者,我错过了什么吗?
由于 JConsole 支持 SOCKS,因此有一种更好的方法可以使用 SSHocks 隧道来完成此操作:
-
在某个空闲端口(例如 7777)上本地创建 SSHocks 代理:
ssh -fN -D 7777 用户@防火墙主机
-
通过指定 SOCKS 代理(例如 localhost:7777)和 JMX 服务器的地址(例如 localhost:2147)来运行 JConsole
jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7777 服务:jmx:rmi:///jndi/rmi://localhost:2147/jmxrmi -J-DsocksNonProxyHosts=
正如下面的答案之一所述,从 JDK 8u60+ 开始,您还需要具有-J-DsocksNonProxyHosts=
选项以使其正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)