我正在尝试使用JSch(SSH)api从Java在远程Linux机器上运行命令。 exitStatus
的值为-1
[int exitStatus = channelExec.getExitStatus()
]
获得负值的可能原因是什么?
答案 0 :(得分:5)
请注意getExitStatus()上的the documentation。
退出状态将为-1,直到频道关闭。
答案 1 :(得分:1)
' - 1'表示尚未从远程sshd收到退出状态代码。
答案 2 :(得分:1)
这是我的代码。它工作正常。
public static Result sendCommand(String ip, Integer port, String userName, String password, String cmd) {
Session session = null;
ChannelExec channel = null;
Result result = null;
try {
JSch jsch = new JSch();
JSch.setConfig("StrictHostKeyChecking", "no");
session = jsch.getSession(userName, ip, port);
session.setPassword(password);
session.connect();
channel = (ChannelExec)session.openChannel("exec");
InputStream in = channel.getInputStream();
channel.setErrStream(System.err);
channel.setCommand(cmd);
channel.connect();
StringBuilder message = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null)
{
message.append(line).append("\n");
}
channel.disconnect();
while (!channel.isClosed()) {
}
result = new Result(channel.getExitStatus(),message.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
try {
session.disconnect();
} catch (Exception e) {
}
}
}
return result;
}