这是正确的方法吗?
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");
}
}
答案 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"};