通过JSch使用SSH隧道访问生产环境中的JMX

3

我正在尝试使用JMX自动化执行某些操作的步骤。

在开发环境下可以正常工作,但是在受防火墙保护的生产环境中,我需要创建SSH隧道,然后才能访问JMX控制台。

以前,我使用putty或ssh创建隧道并在本地运行我的Java程序。由于我们只有1-2个主机,这很容易。现在增加到了10个主机,我不想每次都创建隧道,断开连接和运行程序。

我想做的是,使用JSch自动创建SSH隧道,并将JMX与Java程序连接起来。我尝试过了,但它不起作用。

我得到了以下错误信息: java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: java.net.ConnectException: Connection refused: connect

这是否可能实现?

1个回答

1

为什么不使用Runtime.exec()来启动ssh?例如:

public static void main(String[] args) {
  String[][] data = new String[][]{new String[]{"user@server1", "2000:server1:30"},
          new String[]{"user2@server4", "2000:server4:30"}};
  Process[] processes = new Process[data.length];
  for (int i=0; i<data.length; i++) {
    processes[i] = Runtime.getRuntime().exec("ssh", data[i][0], "-L", data[i][1], "-N");
  }
  //do something else, for example, wait for user interaction here
  for (int i=0; i<data.length; i++) {
    processes[i].destroy();
  }
}

那么我只能隧道连接一个盒子。我想同时启动多个隧道。 - coder
Runtime.exec是系统范围的。即使你在每个服务器上执行一个线程,我也不确定。 - coder
我刚刚意识到,你可以在循环中创建ssh ProcessRuntime.exec()在启动程序后立即返回),等待用户按下回车键或某个函数完成,然后在循环中杀死所有这些进程。 - thejh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接