如何通过Java在SSH中运行多个命令?

sta*_*low 2 java ssh

如何使用Java运行时在SSH中运行多个命令?

命令: ssh user@127.0.0.1'export MYVAR = this/dir/is/cool;/run/my/script/myscript; echo $ MYVAR'

@Test
  public void testSSHcmd() throws Exception
  {
    StringBuilder cmd = new StringBuilder();

    cmd.append("ssh ");
    cmd.append("user@127.0.0.1 ");
    cmd.append("'export ");
    cmd.append("MYVAR=this/dir/is/cool; ");
    cmd.append("/run/my/script/myScript; ");
    cmd.append("echo $MYVAR'");

    Process p = Runtime.getRuntime().exec(cmd.toString());
  }
Run Code Online (Sandbox Code Playgroud)

它自己的命令可以工作,但是当试图从java运行时执行时它不会.有什么建议或意见吗?

dog*_*ane 5

使用较新的ProcessBuilder类而不是Runtime.exec.您可以通过指定程序及其参数列表来构造一个,如下面的代码所示.您不需要在命令周围使用单引号.您还应该阅读stdout和stderr流以及waitFor完成的过程.

ProcessBuilder pb = new ProcessBuilder("ssh", 
                                       "user@127.0.0.1", 
                                       "export MYVAR=this/dir/is/cool; /run/my/script/myScript; echo $MYVAR");
pb.redirectErrorStream(); //redirect stderr to stdout
Process process = pb.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while((line = reader.readLine())!= null) {
    System.out.println(line);
}
process.waitFor();
Run Code Online (Sandbox Code Playgroud)