java - JConsole 通过 ssh 本地端口转发

标签 java ssh jmx

我希望能够远程连接到暴露了 JMX 的 Java 服务,但是它被防火墙阻止了。我尝试使用 ssh 本地端口转发,但是连接失败。查看wireshark,似乎当您尝试连接jconsole时,它想在连接到端口9999后通过一些临时端口进行连接,这些端口被防火墙阻止。

有没有办法让 jconsole 只通过 9999 连接或使用代理?是 this article still the best solution ?或者,我错过了什么?

最佳答案

由于 JConsole 支持 SOCKS,因此使用 SSH socks 隧道有更好的方法:

  1. 在某个空闲端口(例如 7777)上本地创建 SSH socks 代理:

    ssh -fN -D 7777 user@firewalled-host

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

    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7777 service:jmx:rmi:///jndi/rmi://localhost:2147/jmxrmi -J-DsocksNonProxyHosts=

正如以下答案之一所述,从 JDK 8u60+ 开始,您还需要具有 -J-DsocksNonProxyHosts= 选项才能使其正常工作。

关于java - JConsole 通过 ssh 本地端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093376/

相关文章:

java - 从 Java 代码启用/禁用对当前运行的 JVM 的调试器支持

java - 如何构造数组的引用?

java - 如何将 Action 添加到 libgdx 中的纹理打包程序?

Java - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException : Unrecognized field "" not marked as ignorable

python - 通过 Python 中的 scp 和 os 模块从远程服务器安全复制文件

ssh - 如何在 Ansible 的一个 list 中使用多个私钥

java - SQL 错误 : syntax error at or near "-"Position: 43

git - 无法将主机添加到已知主机列表 - 意外删除了我的 .ssh 文件夹中的所有文件

java - 使用 JMX 获取线程 CPU 时间的有效方法

java - 通过 SSH 将 Jconsole 连接到远程 JVM