大家好,请问大家一个非常奇怪的问题,具体描述如下:
我做了一个简单的访问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命令,该如何解决这个问题?