【问题标题】:Accessing JMX in production via SSH tunnel using JSch使用 JSch 通过 SSH 隧道访问生产环境中的 JMX
【发布时间】:2011-05-03 12:39:30
【问题描述】:

我正在尝试使用 JMX 自动执行一些操作。

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

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

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

我得到 java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常是: java.net.ConnectException:连接被拒绝:连接

有可能吗?

【问题讨论】:

    标签: java ssh jmx ssh-tunnel


    【解决方案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();
      }
    }
    

    【讨论】:

    • 然后我只能通过隧道连接到一个盒子。我想并行启动多个隧道。
    • Runtime.exec 是系统范围的。即使您在每台服务器上执行一个线程,我也不确定。
    • 我刚刚意识到你可以在一个循环中创建 ssh Process es(Runtime.exec() 启动程序后立即返回),等待用户按回车或某些功能完成,然后循环杀死所有这些进程。
    猜你喜欢
    • 1970-01-01
    • 2015-05-05
    • 2014-12-15
    • 2010-11-17
    • 2011-10-18
    • 2020-01-28
    • 2011-09-11
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多