2015-04-30 190 views
0

我正在編寫一個應用程序,通過SSH連接到服務器,打開一個應用程序(它在shell上運行)並使用它。我正在使用JSch,並設法連接,打開應用程序並向其發送命令。現在我面臨兩個問題:JSch Esc命令和編碼

  1. 在Windows上我有與應用程序的編碼問題(在Linux上,如果我使用IDE控制檯輸出來運行它,我有同樣的問題,那隻能說明對上的bash )。這裏有一個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:服務器使用sh和bash的不是。

+0

我認爲可能存在一個問題,在窗口呈現顏色的可行性 – Augusto

回答

2

至於你的第一個問題,那些是ANSI轉義代碼。當您創建Jsch shell會話時,默認情況下會分配一個僞終端 - 這會導致發送這些序列。您可以禁用僞終端:

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

如需更多信息,請參閱this discussion

關於第二個問題,問題是在Windows上,Java的System.in被緩存,並且不允許您輕鬆地中繼轉義密鑰。您應該能夠讀取文本行並將它們發送到遠程應用程序。對於其他任何事情,您都必須訴諸本地代碼才能獲得實際的按鍵。有關如何在不同操作系統上執行此操作的更多詳細信息,請參閱this discussion

+0

謝謝。我已經設法解決了第一個問題。我已經決定爲我的問題使用另一種方法,因爲我的要求是我無法用ssh客戶端解決的。我會接受你的回答。 – Augusto