0

当我运行以下代码时,它是来自 jsch 示例之一的修改块。ssh 命令有效,但是虽然我可以在 eclipse 或 jdb 中看到后续的 stdout/stderr,但当我在 eclipse 之外运行时,我看不到输出。我假设 stdout 和/或 stderr 已被重定向,但我不知道如何取消重定向。

谢谢约翰罗斯

public void runSSHCommand(final String command, final String user, final String pwd,
    final String host)
{
    try
    {

        final JSch jsch = new JSch();
        final Session session = jsch.getSession(user, host, 22);
        java.util.Properties config = new java.util.Properties(); 
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.setPassword(pwd);
        session.connect();

        final Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand(command);
        channel.setInputStream(null);
        ((ChannelExec) channel).setErrStream(System.err);
        final InputStream in = channel.getInputStream();
        channel.connect();
        final byte[] tmp = new byte[1024];
        while (true)
        {
            while (in.available() > 0)
            {
                final int i = in.read(tmp, 0, 1024);
                if (i < 0)
                {
                    break;
                }
                //System.out.print(new String(tmp, 0, i));
            }
            if (channel.isClosed())
            {
                if (in.available() > 0)
                {
                    continue;
                }
                System.out.println("exit-status: " + channel.getExitStatus());
                break;
            }
            try
            {
                Thread.sleep(1000);
            } catch (final Exception ee)
            {
            }
        }
        channel.disconnect();
        session.disconnect();
    } catch (final Exception e)
    {
        System.out.println(e);
    }

    return;
}
4

0 回答 0