3

我正在尝试自动化使用 JMX 做一些事情的步骤。

它适用于开发环境。但是对于受防火墙保护的生产,我需要建立一个 SSH 隧道,然后只有我可以访问 JMX 控制台。

早些时候,我使用 putty 或 ssh 创建隧道并在本地运行我的 java 程序。由于我们使用了 1-2 台主机,因此更容易。现在它变成了多达10个主机。现在我不想每次都创建隧道并断开连接并运行程序。

我想做的是,使用 JSch 自动创建 SSH 隧道并将 JMX 与 java 程序连接。我试图这样做,但它不起作用。

我收到 java.rmi.ConnectException: Connection refused to host: localhost; 嵌套异常是:java.net.ConnectException:连接被拒绝:连接

有可能这样做吗?

4

1 回答 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();
  }
}
于 2010-11-01T16:40:54.857 回答