如何使用java runtime.exec()和ssh到另一台机器来启动进程

时间:2011-06-06 17:16:37

标签: java runtime.exec

这是正确的方法吗?

 public void doSomething()
 {
    Process p;

    String[] cmd = {"/usr/bin/ssh", "someRemoteMachine", "/absPathToMyProg/myProg"};
    String[] envp = {"PATH=path_needed_toRun_myProg"};

    try
    {
        p = Runtime.getRuntime().exec(cmd,envp);

    }
    catch (IOException e)
    {
        System.err.println("Epic Fail");
    }
 }

2 个答案:

答案 0 :(得分:3)

您是否尝试过JSch。它在BSD类型许可下发布。它纯Java,易于使用。

答案 1 :(得分:1)

除了使用JSch(或任何其他Java SSH实现)之外,就像Suraj所说的那样,通过环境变量传递Path可能不起作用,因为大多数SSH守护程序只接受来自另一方的一小部分变量(主要是相关的)本地化或终端类型)。

由于ssh(或“命令”,如果使用带有ChannelExec的JSch)的参数传递给远程shell执行,您可以尝试在此命令中定义路径(如果您的默认shell与POSIX sh兼容):

PATH=path_needed_toRun_myProg /absPathToMyProg/myProg

你的Runtime.exex数组看起来像这样:

String[] cmd = {"/usr/bin/ssh", "someRemoteMachine",
                "PATH=path_needed_toRun_myProg /absPathToMyProg/myProg"};