Странные символы при подключении к Windows через SSH на Java (Jsch)

Я пытаюсь выполнить команду в Windows XP с каналом Jsch Shell, но по какой-то причине я получаю странные символы в своем потоке 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

И когда я пытаюсь вызвать компакт-диск 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, спасибо за любую помощь.


person Diego Fernando Murillo Valenci    schedule 17.12.2012    source источник
comment
вы пробовали прямой ssh? Если прямой ssh ​​работает, то это jsch. Попробуйте jsch с ssh-сервером на базе Linux. Если jsch работает, то это проблема FreeSshd.   -  person Usman Saleem    schedule 17.12.2012
comment
спасибо, как я сказал в своем вопросе, я пытаюсь использовать прямой ssh, но я не говорю, что использую ssh из ubuntu, это работает, тот же код, который я пытаюсь использовать в Windows, я использовал его в своей ubuntu, и он также работает, но с окнами не работает , так что может быть только FreeSSHd, но я читал, что это лучший бесплатный ssh ​​для Windows и самый простой в установке, любое предложение по ssh-серверу? Спасибо.   -  person Diego Fernando Murillo Valenci    schedule 17.12.2012
comment
@Usman Saleem, ваше предложение было правильным, я устанавливаю openssh в свои окна, и все работает нормально, спасибо: D   -  person Diego Fernando Murillo Valenci    schedule 17.12.2012
comment
Никаких проблем, Диего :), я добавлю свой комментарий в качестве ответа, чтобы вы могли его принять.   -  person Usman Saleem    schedule 18.12.2012
comment
stackoverflow .com/questions/17221127/ я нашел!   -  person    schedule 31.07.2013


Ответы (2)


Вы пробовали прямой ssh? Если прямой ssh ​​работает, то это jsch. Попробуйте jsch с ssh-сервером на базе Linux. Если jsch работает, то это проблема FreeSshd.

person Usman Saleem    schedule 17.12.2012

Это проблема кодировки плюс отсутствие эмуляции терминала.

Демон SSH ожидает взаимодействия с устройством, которое понимает последовательности управления терминалом (строка [1;1H, которой на самом деле предшествует символ ESC). Ваша программа не обеспечивает эмуляцию терминала, поэтому вы видите необработанные управляющие последовательности.

Символ ромба/вопросительного знака указывает на то, что используемый вами шрифт не содержит символ, отправленный сервером. В этом случае это может быть ударение.

person Jim Garrison    schedule 17.12.2012
comment
U+FFFD указывает на то, что имело место преобразование из Unicode в устаревший набор символов, в результате которого была потеряна информация в процессе ИЛИ имелась недопустимая последовательность кодовых единиц (применимо к UTF-8 и UTF-16). К шрифтам отношения не имеет. - person Joey; 17.12.2012
comment
спасибо, окна на испанском языке, так что алмаз/вопрос действительно ó (версия), как я могу установить шрифт в этом случае для этого?, и как я могу использовать правильную эмуляцию терминала? У Jsch есть такой метод, как channel.setPty, может быть, это то, что мне нужно? - person Diego Fernando Murillo Valenci; 17.12.2012