运行时远程SSH命令退出,代码为255

时间:2016-06-29 13:20:23

标签: java java-7

String ipAddress = address.getHostAddress();
responseObject.put("ipAddress", ipAddress);
String loginCommand = COMMAND_SSH + userName + "@" + ipAddress;
Process remoteProcess = Runtime.getRuntime().exec(loginCommand);
PrintStream out = new PrintStream(remoteProcess.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(remoteProcess.getInputStream()));
//out.println(password);
while (in.ready()) {
    String s = in.readLine();
    LOGGER.info(s);
}
out.println(COMMAND_EXIT);

调试时的上述代码始终显示remoteProcess已退出代码255,我无法弄清楚原因?我尝试用ls替换loginCommand并且它正常工作?我可以知道我哪里错了。

P.S:我不允许使用外部库(包括操作系统)。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题,但它们都不是问题的确切原因,因为根本没有足够的代码。

while (in.ready()) {
    String s = in.readLine();
    LOGGER.info(s);
}
当流准备好时,

in.ready()返回true。你在这里介绍一个竞争条件。如果在in-stream准备好之前到达while(),它将跳过整个语句。 而是使用:

String s;
while ((s = in.readLine()) != null){
    LOGGER.info(s);
}

此外,您可能希望确保还阅读标准错误输出。