【问题标题】:Multi-level ssh connections using java使用 java 的多级 ssh 连接
【发布时间】:2014-08-28 09:18:42
【问题描述】:

我正在尝试使用本地机器 (linux) 上的 swing GUI 在远程机器 (linux) 上运行一组脚本,并将命令输出(在运行时)读回文本区域。

我尝试连接的机器位于学校防火墙后面,因此我必须先连接到该机器,然后才能连接到它们。

典型的 bash 语法类似于:“ssh -t user1@host1 ssh -t user2@host2” 起初我尝试使用 runtime() 直接调用上述命令,但这似乎根本不起作用,或者我可能遗漏了一些东西。我没有得到以下程序的输出。

    Process dirReader = Runtime.getRuntime().exec("ssh -t user1@host1 ssh -t user2@host2");
    InputStream stdout = dirReader.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
    String line = reader.readLine();
    while(line != null){
        fileNames.add(line);
        line = reader.readLine();
    }
        reader.close();reader=null;
        stdout.close();stdout=null;
        dirReader.destroy();dirReader=null;

    } catch(IOException e){
        System.out.println("Exception: Error reading models directory");
        System.exit(1);
    }

当我用像“ls”这样简单的东西运行上面的代码时,我得到了预期的结果。我怀疑 ssh 需要进行一些“特殊”处理,所以最近几天我一直在搞乱第三方库。 JSch 和 ganymed。

单级连接很简单,但恐怕我对多级连接有点难过。你会认为会有一个简单的解决方案,但我看不到。一些人建议使用隧道,但我也没有太多运气。

我看到 jSch 中有一种方法可以直接打开通道以“模拟”控制台。这会起作用,但对于我想做的事情来说似乎有点过分了。在我的 GUI 后面弹出一个控制台也是不可取的。

所以重申一下,我想:

  1. 与另一台服务器后面的机器建立 ssh 连接。
  2. 在该服务器上运行脚本
  3. 将该脚本的标准输出通过管道传回我的 gui。

我们将不胜感激关于 #1 的建议。

我已经为此苦恼了好几天。有几个类似的线程,但似乎没有一个真正回答我的问题。请随时给我发送链接,但如果它在 Google 的前 5 页上;很有可能我已经看到了。

【问题讨论】:

    标签: java swing bash ssh


    【解决方案1】:

    经过数小时的调查,我终于发现了以下内容:

    How to use jsch with ProxyCommands for portforwarding

    我不知道我是否遗漏了什么,但我发现至少有 50 个关于这个问题的主题没有令人满意的解决方案。

    我想故事的寓意是在开始之前阅读所有示例。

    直接解决:http://www.jcraft.com/jsch/examples/JumpHosts.java.html

    现在找到一种在 Windows 中执行此操作的方法。最好不要强制用户安装 ssh 客户端。

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2016-06-27
      • 1970-01-01
      相关资源
      最近更新 更多