在JSch中获取退出状态值-1的原因是什么

时间:2014-01-22 10:24:50

标签: java ssh jsch

我正在尝试使用JSch(SSH)api从Java在远程Linux机器上运行命令。 exitStatus的值为-1 [int exitStatus = channelExec.getExitStatus()]

获得负值的可能原因是什么?

3 个答案:

答案 0 :(得分:5)

请注意getExitStatus()上的the documentation

退出状态将为-1,直到频道关闭。

答案 1 :(得分:1)

' - 1'表示尚未从远程sshd收到退出状态代码。

答案 2 :(得分:1)

API Description

这是我的代码。它工作正常。

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;
}