2016-06-29 237 views
1
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,它工作正常吗?我可以知道我出错的地方吗?SSH远程命令码255

P.S:我不允许使用外部库(包括OS)。

+0

考虑将错误输出重定向到标准输出或读取错误输出。 – user254948

回答

0

你的代码有几个问题,但没有一个必须是你的问题的确切原因,因为没有足够的代码给出。

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

in.ready()在流准备就绪时返回true。你在这里引入竞争条件。如果在插入准备就绪之前达到了while(),则会跳过整个语句。 而是使用:

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

此外,您可能希望确保您也可以参考标准错误输出。

+0

谢谢:)我一定会尝试一下,告诉你它是如何发生的。这也是代码的主要部分,其余部分只是接收参数 –

+0

@MageshKumaar你的代码不显示你如何获得COMMAND_EXIT,COMMAND_SSH也没有显示;) – user254948

+0

那些是最终的字符串,它们的值是'ssh'和'出口' –