0

jschの例の1つから変更されたブロックである次のコードを実行すると。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