当我运行以下代码时,它是来自其中一个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;
}