4

ライブラリJSch - Java Secure Channelを使用して、Android アプリで ssh 接続を作成しようとしましたが、動作します。

ここで、コマンドを実行して結果を取得したいと思います。

私はいくつかの方法を試しましたが、これが最も効果的です。ただし、この方法は部分的にしか機能しません。何らかの理由で説明できないため、プログラムはwhileループの最後で停止しますが、ログに表示されるコマンドの結果です。

これが私のコードです:

public static String executeRemoteCommand(String username, String password, String hostname, int port) throws Exception {     
    JSch jsch = new JSch();
    Session session = jsch.getSession(username, hostname, port);
    session.setPassword(password);

    // Avoid asking for key confirmation
    Properties prop = new Properties();
    prop.put("StrictHostKeyChecking", "no");
    session.setConfig(prop);

    session.connect();

    Channel channel = session.openChannel("shell");
    channel.connect();

    DataInputStream dataIn = new DataInputStream(channel.getInputStream());  
    DataOutputStream dataOut = new DataOutputStream(channel.getOutputStream());  

    // send ls command to the server  
    dataOut.writeBytes("ls\r\n");  
    dataOut.flush();  

    // and print the response   
    String line = dataIn.readLine();
    String result = line + "\n";

    while ((line = dataIn.readLine()) != null) {
        result += line + "\n";
        Log.i("TAG", "Line: "+line);
    }

    dataIn.close();  
    dataOut.close();  
    channel.disconnect();  
    session.disconnect();

    return result;
}

JSch でコマンド シェルを実行するより良い方法はありますか?

前もって感謝します !

4

2 に答える 2

-1

私の知る限り、JSch が唯一の現実的な選択肢です。

私は、Jsch のエラーは掘り下げる必要がある傾向があることを発見しました。しかし、最初の例では、最小限のエラーをキャッチして出力する必要があります。

try{ 
    JSch jsch = new JSch();
    Session session = jsch.getSession(username, hostname, port);
    ... omitted 
 } catch (Exception e) {
     System.out.println(e) 
 }

サイトのサンプルコードも見てください

于 2013-05-31T21:03:25.607 に答える