Laufenden Befehl mit „exec“ – Kanal mit JSch gibt keine Ausgabe zurück

Ich versuche, einen Befehl auszuführen, auf einem Linux-server mit SSH von Android mit JSch.

Soweit ich weiß, ich bin auf den server verbinden, aber wenn ich Versuch zum abrufen der Ergebnisse des Befehls erhalte ich nichts.

Server verbinden:

public class SSHCommand {

    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();

        //SSH Channel
        ChannelExec channelssh = (ChannelExec)
                session.openChannel("exec");
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        channelssh.setOutputStream(baos);

        //Execute command
        channelssh.setCommand("ls");
        channelssh.connect();
        channelssh.disconnect();

        return baos.toString();
    }
}

Daten abrufen:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final String TAG = "TESTING";

        new AsyncTask<Integer, Void, Void>(){
            @Override
            protected Void doInBackground(Integer... params) {
                try {
                    Log.d(TAG, SSHCommand.executeRemoteCommand("username", "password", "192.168.0.1", 22));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute(1);
    }
}

Was vermisse ich hier?

InformationsquelleAutor Will | 2016-04-03



One Reply
  1. 7

    Trennen Sie sofort, nachdem Sie den Befehl starten, bevor keine Ausgabe zurückgegeben.

    Müssen Sie warten, bis die „exec“ – Kanal zu schließen (er schließt, sobald der Befehl abgeschlossen ist).

    Sehen die offizielle JSch Beispiel für die „exec“ – Kanal.

    byte[] tmp=new byte[1024];
    while(true){
      while(in.available()>0){
        int i=in.read(tmp, 0, 1024);
        if(i<0)break;
        System.out.print(new String(tmp, 0, i));
      }
      if(channel.isClosed()){
        if(in.available()>0) continue; 
        System.out.println("exit-status: "+channel.getExitStatus());
        break;
      }
      try{Thread.sleep(1000);}catch(Exception ee){}
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.