大家好,请问大家一个非常奇怪的问题,具体描述如下:
我做了一个简单的访问ssh2的东西,目前在测试windows下的时候发现一些奇怪问题。我在调用一台机器的时候(虚拟机),无论传入的command为什么,他都是只返回登陆后的信息。
核心代码如下:
exceChannel = (ChannelExec)session.openChannel("exec");
is = exceChannel.getInputStream();
errStream = exceChannel.getErrStream();
exceChannel.setCommand(command);
exceChannel.connect();
StringBuilder builder = new StringBuilder();
while (true) {
byte[] bytes = new byte[1024];
while(is.available()>0){
is.read(bytes, 0, bytes.length);
builder.append(new String(bytes));
}
while(errStream.available()>0){
errStream.read(bytes, 0, bytes.length);
log.error(new String(bytes));
}
log.debug("value:"+builder.toString());
if (exceChannel.isClosed()) {
log.debug("exit-status: " + exceChannel.getExitStatus());
break;
}
// try {
// Thread.sleep(1000);
// } catch (Exception e) {
// }
exceChannel.disconnect();
}
通过我的DEBUG发现,所传入的值等信息应该问题不大,同样的命令信息,我访问一个非虚拟机系统和一个虚拟机系统的答案是不一样的,如下:
虚拟机系统返回:
2013-01-23 16:32:29,093 DEBUG [main] (SshCommandTool.java:112) - value:Microsoft Windows [Version 5.2.3790] (C) Copyright 1985-2003 Microsoft Corp. D:\sftp\ICW\home\ssh2>
非虚拟机系统返回
2013-01-23 16:33:50,125 DEBUG [main] (SshCommandTool.java:112) - value:java version "1.6.0_38" Java(TM) SE Runtime Environment (build 1.6.0_38-b05) Java HotSpot(TM) Client VM (build 20.13-b02, mixed mode, sharing)
我想问的是:是否大家在做这个时候会碰到这个问题?我使用的框架是Jsch,完全支持ssh的。而我在使用客户端程序putty分别访问两台机器的时候 是都可以执行的。
另外,我也分别尝试了不同的开源工具如j2ssh,trilead-ssh2都是这样的问题。求高人解释下,为什么这种问题会发生?如果要执行远程windows命令,该如何解决这个问题?