当前位置: 首页 > 知识库问答 >
问题:

通过ssh隧道对远程计算机的JMX/JSTATD访问

慕容坚
2023-03-14

我希望使用jmx或JSTATD通过ssh隧道(到EC2机器)使用visualvm应用程序。我该怎么做?下面是已经尝试(和失败)的列表:(顺便说一句:如果visual vm不合适,如何在远程计算机上查找内存泄漏?)

我在EC2机器上设置了jstatd服务器(应用程序已经在上面运行),然后在VisualVM中设置了一个将本地端口3333映射到远程端口1099的隧道,我试图在端口3333上使用jstatd进行连接...EC2上的所有进程都没有出现

这个链接表明jstatd打开了另一个端口:http://rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm……所以我将这个端口从本地主机隧道到远程。我重新启动了visual vm...还是什么都没有

当我尝试使用folloing命令列出从EC2运行的进程时:

jps -l -m -v rmi://localhost

...我有一个过程列表

当我使用

jps -l -m -v rmi://localhost:3333
java -Dcom.sun.management.jmxremote.port=3333 \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Dcom.sun.management.jmxremote.authenticate=false\
        -cp :post/* <appName>

...应用程序工作,所以我隧道本地端口3333到远程3333

然后,我尝试从visual vm Interface:...设置一个指向LocalHost:3333的jmx链接,它弹出一个错误,上面写着:

cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi

如果我需要设置一个到remove RMI服务器的链接,我不知道该怎么做。

首先,我将jmx_remote jar添加到类路径中,并使用与上面展示的JMX案例中相同的命令在远程机器上启动应用程序。我在oracle下载链接中找到了这个jar

我设置了从本地端口3333到远程端口3333的ssh隧道。然后,我用calspath中相同的jmx_remote文件启动了visualvm。

visualvm -cp:a ~/jmx/jmxremote_optional.jar

然后,我尝试用以下方法将visualvm连接到远程服务器:

service:jmx:jmxmp://localhost:3333

我不确定SOCKS代理是否工作,所以下面是我尝试连接的方式:

ssh -i ~/.ssh/starter.pem -v -D 9696 user@host

为了完整起见,我在另一端用以下命令启动了该命令:

    java -Dcom.sun.management.jmxremote\
 -Dcom.sun.management.jmxremote.ssl=false\
 -Dcom.sun.management.jmxremote.authenticate=false\
 -Dcom.sun.management.jmxremote.port=3333 <app>

在本地端,我按照指向visualvm帮助页的链接设置了visualvm连接。

debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 2: new [dynamic-tcpip]
channel 3: open failed: connect failed: Connection timed out
debug1: channel 3: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 3333, connect from 127.0.0.1 port 43909, nchannels 4
debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
channel 2: open failed: connect failed: Connection timed out
debug1: channel 2: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 1099, connect from 127.0.0.1 port 44644, nchannels 4

感谢阅读:)

共有1个答案

巫研
2023-03-14

将SSH隧道与SOCKS代理一起使用。更多细节请参见此帖子。

 类似资料:
  • 我正在我的机器上运行Ansible。我的机器没有ssh访问远程机器的权限。来自本地计算机的端口22连接被学院防火墙阻止。但是我可以访问一台机器(ssh隧道),通过它我可以登录到远程机器。现在有一种方法可以在远程主机上从本地机器运行ansible playbook。 在某种程度上,可以通过ssh隧道将Ansible/ssh连接到远程机器。但并不完全登录到ssh隧道。连接将通过隧道。 另一种方法是我可

  • 问题内容: 我的目的是连接到位于防火墙后面的服务器(主机)。我可以通过连接到网络中的另一台服务器(隧道)然后通过SSH到该服务器来访问此服务器。但是,我无法通过JSch实现相同的方案。 我无法为此编写以下代码。如果我在这里做任何愚蠢的事情,请告诉我。 上面的代码在行中给出了以下异常。 问题答案: jsch上的代理设置允许您连接到远程端上 正在运行的 代理服务器。一个在远程端将 不 被视为一个代理。

  • 我想使用RazorSQL连接到我的数据库,该数据库正在远程服务器上运行。我使用以下命令在本地主机上创建SSH隧道: 我通过RazorSQL的GUI配置连接,将本地主机指定为主机,将1111指定为端口。当我单击“Connect”(连接)时,出现以下错误消息: 其中是远程服务器的IP地址。 此外,我不允许更改我的pg_hba的内容。conf文件。这就是目前的情况: 是否可以使用我当前的设置,在不修改服

  • 有3台计算机: 我想设置到oracle DB的数据源连接(在我的spring boot应用程序中)。 本地计算机和带有oracle DB的计算机之间没有直接连接。因此,我使用通过远程服务器的ssh隧道: SSH-L 127.0.0.1:8081:some.ldap.host:389 user@remote.server.host 在application.yml文件中,我使用了进一步的URL: 当

  • 问题内容: 我已经在两个服务器 A 和 B 之间建立了SSH隧道。 B 有MySQL服务器,这可行: 虽然这不是: 尽管my.cnf具有以下几行: 现在关于隧道。它连接以下内容: 但是当(在 A上 ,端口转发)时,我会 我懂了 当我这样做 我懂了 可能是什么原因?我究竟做错了什么? 问题答案: 这里有三个问题。 1-暂时忘记SSH隧道 您不能将MySQL绑定到多个特定IP。第一个子句被第二个子句覆