0

ssh 経由で送信されたコマンドからの応答を取得しようとしています。JSch lib を使用して接続します。接続は確立されていますが、送信されたコマンドから応答が返されません。

public void openSSH(
        String username,
        String password,
        String hostname,
        int port) throws Exception {     

    JSch jsch = new JSch();
    Session session = jsch.getSession(username, hostname, 22);
    this.session = session;
    session.setPassword(password);

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

}

public String runCommand(String command)  throws Exception {
    // SSH Channel
    ChannelExec channelssh = (ChannelExec) session.openChannel("exec");      
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    InputStream in = channelssh.getInputStream();
    channelssh.setOutputStream(baos);

    // Execute command
    channelssh.setCommand(command);
    channelssh.connect();        



     System.out.println("Unix system connected...");
        byte[] tmp = new byte[1024];
        while (true){

            while (in.available() > 0) {
                Log.v("running", "line");  // won't work
                int i = in.read(tmp, 0, 1024);
                if (i < 0) {

                    break;
                }
                String line = new String(tmp, 0, i);
                System.out.println("Unix system console output: " +line);
                        channelssh.disconnect();
            }
        }
}



private class AsyncTaskOne extends AsyncTask<Void, Void, Boolean> {


    @Override
    protected Boolean doInBackground(Void... params) {

        try {
            openSSH("login", "pass", "10.10.10.80", 22 );
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return true;
    }

    protected void onPostExecute(Boolean value) {

        if (value)  {
        try {
            runCommand("ls -llh");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        }
    }

}
4

1 に答える 1

0

あなたのinputStreamが実際に利用可能かどうかを確認してください.私の理解では、問題はあなたのinputStreamがあなたに何も与えないことです.

 InputStream in = channelssh.getInputStream();
// channelssh.setOutputStream(baos); 

この行にコメントを付けて、実際に何かがあるかどうかを確認してください。また、接続されていることをどのように確認していますか? コマンドを設定する正しい方法はこれですので、これを行ってください:

 Channel channel=session.openChannel("exec");
  ((ChannelExec)channel).setCommand(command);
于 2013-03-05T13:16:56.823 に答える