2015-04-30 2 views
0

Я пишу приложение для подключения к серверу через SSH, откройте приложение (оно работает на оболочке) и используйте его. Я использую JSch, и мне удалось подключиться, открыть приложение и отправить ему команды. Теперь я столкнулся 2 проблемы:Команды и кодировка JSch Esc

  1. В Windows У меня возникли проблемы с кодировкой с приложением (в Linux, если я использую выход IDE консоли, чтобы запустить его у меня та же проблема, он показывает только право на баш). Вот screehshot: with wrong encoding вот скриншот того, что он должен показать: with right encoding
  2. Приложение, в котором я запущен, использует клавишу ESC, и я не могу использовать его в приложении, которое я пишу. Он просто пишет ^[ на выходе А вот код, я использовал, чтобы сделать это приложение:

    JSch shell = new JSch(); 
    Session session = shell.getSession("myUser", "myHost"); 
    session.setPassword("myPassword"); 
    session.setConfig("StrictHostKeyChecking", "no"); 
    session.connect(); 
    Channel channel = session.openChannel("shell"); 
    channel.setOutputStream(System.out); 
    PipedInputStream in = new PipedInputStream(); 
    PipedOutputStream out = new PipedOutputStream(in); 
    channel.setInputStream(in); 
    channel.connect(); 
    out.write("my_application\n".getBytes()); 
    Thread.sleep(1000); //waiting for the app to load 
    out.write("\n".getBytes()); 
    out.write("appUser\n".getBytes()); 
    out.write("appPassword\n".getBytes()); 
    channel.setInputStream(System.in); 
    

PS: сервер использует ш и не Баш.

+0

Я думаю, что может возникнуть проблема с вложением на окна для визуализации цветов – Augusto

ответ

2

Что касается вашего первого вопроса, это коды выхода ANSI. Когда вы создаете сеанс оболочки Jsch, по умолчанию выделяется псевдотерминал - это приводит к отправке этих последовательностей. Вы можете отключить псевдо терминал:

((ChannelShell)channel).setPty(false);

подробнее см this discussion.

Что касается вашего второго вопроса, проблема в том, что в Windows Java System.in буферизирован и не позволит вам легко эвакуировать ключ эвакуации. Вы должны иметь возможность читать строки текста и отправлять их в удаленное приложение. Для чего-то большего, вам придется прибегнуть к собственному коду, чтобы получить фактические нажатия клавиш. См. this discussion для получения более подробной информации о том, как это сделать в разных операционных системах.

+0

Спасибо. Мне уже удалось решить первую проблему. Я решил использовать другой подход для своей проблемы, поскольку у меня есть требования, которые я не мог решить с помощью ssh-клиента. Я приму свой ответ. – Augusto

Смежные вопросы