使用Java通过ssh运行bash命令

时间:2014-03-05 16:47:14

标签: java bash command-line ssh

我想用java运行ssh脚本。该脚本将数字作为参数。我启动了这段代码:

String myKey="/home/my_key.pem";
Runtime runtime = Runtime.getRuntime();

String commande = "ssh -i "
+myKey+" ubuntu@ec2-56-75-88-183.eu-west-1.compute.amazonaws.com './runScript.bash 8000'";
Process p = runtime.exec(commande);      

BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = reader.readLine();
while (line != null) {

System.out.println(line);
line = reader.readLine();
}

p.waitFor();

我收到此错误:

bash: ./runScript.bash 8000: No such file or directory

文件名正确无误。授予runScript.bash的chmod777

当我直接从bash运行命令行时,它可以工作。但是从IDE来看,它没有。

如何才能正确运行此命令行?

1 个答案:

答案 0 :(得分:2)

错误表明:

bash: ./runScript.bash 8000: No such file or directory

这表明shell正在尝试调用名为./runScript.bash 8000的脚本 - 脚本中包含空格和8000文件。

我很少告诉任何人使用较少的报价,但是,实际上,这确实会解决问题。

最好完全避免双重评估:

Runtime.exec(new String[] {
   "ssh",
   "-i", myKey,
   "ubuntu@ec2-56-75-88-183.eu-west-1.compute.amazonaws.com",
   "./runScript 8000"
})