【问题标题】:Weird Symbols when connecting to windows througth SSH on java (Jsch)通过java(Jsch)上的SSH连接到Windows时出现奇怪的符号
【发布时间】:2012-12-04 05:04:22
【问题描述】:

我正在尝试使用 Jsch Shell 通道在 Windows XP 中执行命令,但由于某种原因,我的 System.out 流中出现奇怪的符号并且无法执行命令,我用于连接的代码是这样的:

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

我在 windows xp 中使用 FreeSShd,该程序在 Ubuntu 上运行,我在控制台中使用 ssh 并与 windows XP 一起使用,我正在尝试在我的 java 程序中实现它,感谢您的帮助。

【问题讨论】:

  • 你试过直接ssh吗?如果直接 ssh 有效,那么它的 jsch。尝试使用基于 linux 的 ssh 服务器的 jsch。如果 jsch 工作,那么它是 FreeSshd 问题。
  • 谢谢,就像我在我的问题中说的那样,我尝试直接 ssh,但我没有说我使用 ubuntu 的 ssh,这行得通,我尝试在 Windows 中使用的相同代码我在我的 ubuntu 中使用它并且也可以,但是在 Windows 上不行,所以只能是 FreeSSHd,但我读到这是 Windows 上最好的免费 ssh 并且最容易安装,有什么 ssh 服务器建议吗?谢谢。
  • @Usman Saleem 你的建议是对的,我在我的窗口中安装了 openssh 并且一切正常,谢谢:D
  • 没有问题 Diego :),我将添加我的评论作为答案,以便您接受。

标签: java windows ssh jsch printstream


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • U+FFFD 表示从 Unicode 到遗留字符集的转换在过程中丢失了信息 OR 存在无效的代码单元序列(适用于 UTF- 8 和 UTF-16)。它与字体无关。
    • 谢谢,windows 是西班牙语,所以菱形/问题真的是ó(版本),在这种情况下我如何设置字体?,以及如何使用正确的终端仿真? Jsch 有一个类似 channel.setPty 的方法也许是我需要的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2021-06-18
    • 2017-05-24
    • 1970-01-01
    • 2019-05-28
    • 2020-04-23
    相关资源
    最近更新 更多