2012-12-17 91 views
1

我想在Windows XP中使用Jsch Shell通道执行命令,但由于某种原因,我在我的System.out流中出现奇怪的符号,并且命令不能执行时,我使用的连接代码是这样的:当通过SSH连接到Windows(Jsch)时连接到Windows的怪异符号

this.session = jsch.getSession(this.login, this.host); 

Properties properties = new Properties(); 
properties.put("StrictHostKeyChecking", "no"); 
session.setPassword(this.password); 
session.setConfig(properties); 

session.connect(30000); 


channel =(ChannelShell) session.openChannel("shell"); 


PipedInputStream pip = new PipedInputStream(40); 
channel.setInputStream(pip); 
channel.setOutputStream(System.out); 

PipedOutputStream pop = new PipedOutputStream(pip); 
print = new PrintStream(pop); 
channel.connect(); 

然后我得到以下信息:

[1;1HMicrosoft Windows XP [Versi�n 5.1.2600][2;1H(C) Copyright 1985-2001 Microsoft Corp.[4;1HC:\Documents and Settings\diego\Escritorio>[4;44H 

,当我尝试调用CD C:\ MyFolder文件\然后另一个命令(所有测试从一个SSH客户端和作品)我发现更奇怪的符号,并没有得到我的命令的结果,可能是什么问题?以下是我发送的命令和结果:

exec.print.println("cd C:\\MyFolder\\"); 
exec.print.println("some other command"); 

结果:

[1;1HMicrosoft Windows XP [Versi�n 5.1.2600][2;1H(C) Copyright 1985-2001 Microsoft Corp.[4;1HC:\Documents and Settings\diego\Escritorio>[4;44H[4;1HC:\Documents and Settings\diego\Escritorio>c[4;58H[4;1HC:\Documents and Settings\diego\Escritorio>cd C:\MyFolder\[4;58H[4;46H[4;58H[4;47H[4;58H[4;48H[4;58H[4;49H[4;58H[4;50H[4;58H[4;51H[4;58H[4;52H[4;58H[4;53H[4;58H[4;54H[4;58H[4;55H[4;58H[4;56H[4;58H[4;57H[4;58H 

我使用的是FreeSShd在Windows XP和程序在Ubuntu上运行,我在我的控制台和作品使用ssh与Windows XP中,我想在我的Java程序中实现它,感谢您的任何帮助。

+2

你有没有试过直接的ssh?如果直接ssh工作,那么它的jsch。用基于Linux的ssh服务器试试jsch。如果jsch工作,那么它是FreeSshd问题。 –

+0

谢谢,就像我在我的问题中说的,我尝试直接SSH,但我不说我使用从Ubuntu的SSH,工程,相同的代码,我尝试在Windows中使用我用它在我的Ubuntu和也工程,但与Windows不要,所以只能是FreeSSHd,但我认为这是最好的免费SSH窗口和最容易安装,任何SSH服务器的建议?谢谢。 –

+0

@Usman Saleem你的建议是正确的,我安装openssh在我的窗口和一切正常,谢谢:D –

回答

1

你试过直接的ssh吗?如果直接ssh工作,那么它的jsch。用基于Linux的ssh服务器试试jsch。如果jsch工作,那么它是FreeSshd问题。

1

这是一个编码问题,加上缺少终端仿真。

SSH守护程序希望与理解终端控制序列的设备([1;1H字符串,实际上前面有一个ESC字符)通信。你的程序不提供终端仿真,所以你看到原始转义序列。

菱形/问号字符表示您使用的字体不包含服务器发送的字符。在这种情况下,它可能是重音字符。

+1

U + FFFD表示有从Unicode转换为遗留字符集的过程中丢失信息* OR *有无效的代码单元序列(适用于UTF-8和UTF-16)。它与字体无关。 – Joey

+0

谢谢,窗户是西班牙语,所以钻石/问题真的是ó(versión),我怎么可以在这种情况下设置一个字体?,以及我如何使用正确的终端仿真? Jsch有一个像channel.setPty的方法,也许我需要什么? –