日期:2014-05-16  浏览次数:20358 次

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