SSH connection

  • Antworten:17
Informous
  • Forum-Beiträge: 17

26.10.2014, 09:41:42 via App

Hallo zusammen,

Ich bräuchte mal eure Hilfe:
Ich habe einen Code, der unter Java funktioniert, allerdings nicht als App. Könnt ihr mir helfen?
Hier der Code:

public void command(){
try{
JSch jsch=new JSch();

        Session session=jsch.getSession("test", "192.168.1.1", 22);

        session.setPassword("password");
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();

        String command="ls";

        Channel channel=session.openChannel("exec");
        ((ChannelExec)channel).setCommand(command);

        channel.connect();

        channel.disconnect();
        session.disconnect();
    }
    catch(Exception e){
        System.out.println(e);
    }

}

Mfg
Informous

Ps: der Code benötigt eine Internetverbindung. Die benutzte library ist JSch.

— geändert am 26.10.2014, 17:45:09

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.10.2014, 17:45:09 via App

Mit Funktioniert nicht kann niemand etwas anfangen...
Sind fehler vorhanden zb. in LogCat festgehalten?
Ist die Internetpermission gesetzt?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Informous
  • Forum-Beiträge: 17

26.10.2014, 17:56:15 via App

Folgendes habe ich gefunden:

com.jcraft.jsch.JSchException: android.os.NetworkOnMainThreadException

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.10.2014, 17:59:48 via App

Ok dann ist die Lib nicht für Android geeignet. Die lib sucht die Daten aus dem inet nicht in einem Eigenen Thread. Somit entsteht die Exception. Das einzige was du probieren kannst ist, um deinen Connector einen Thread zu machen um zu schauen ob es dann passt.
Wenn nicht müsstest du dir eine andere Lib suchen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Informous
  • Forum-Beiträge: 17

26.10.2014, 18:16:44 via App

Kennt ihr denn zufällig eine Lib die mit Android kompatibel ist?

— geändert am 26.10.2014, 18:17:53

Antworten
Fabian Simon
  • Forum-Beiträge: 359

26.10.2014, 22:38:12 via Website

Hi die lib jsch ist für android geeignet nutzt ich auch ! Wie pascal schon sagte musst du die verbinung etc in einem eigenen Thread ausführen

Antworten
Informous
  • Forum-Beiträge: 17

05.11.2014, 14:39:47 via App

Hallo wieder,

Danke euch, hat geholfen! :)

Nur hat es leider eine kleine Zeitverzögerung. Wie kann ich dies verhindern?

Ps: Habe es mit Asynctask gemacht.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.11.2014, 14:43:27 via App

Was meinst du mit Zeitverzögerung?
Wie wirkt sich das aus?
Bei Internetoperationen kann es durchaus zu verzögerungen kommen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Informous
  • Forum-Beiträge: 17

05.11.2014, 14:49:42 via App

Nun, wenn ich den selben code ohne Asynctask als javaconsole schreibe, gibt es keine Zeitverzögerung. Als App, also mit Asynctask, kommt es zu einer 2-3 sekündigen Verzögerung.
Ich nutze die App mit dem Raspi, also zum schalten. Deswegen ist es schon nervig.

— geändert am 05.11.2014, 14:49:50

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.11.2014, 15:23:44 via Website

Vlt. mal einige Logs oder debugmeldungen mit Zeit ausgaben.
Dann findest du die Verzögerung.
Kann aber auch sein, dass android selber einfach langsamer mit dem ganzen Zeugs ist, deswegen könnte es zu Verzögerungen können.
Machst du die Connection immer neu auf oder machst du das am anfang und nutzt die Instanz der Lib?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg C.
  • Forum-Beiträge: 235

05.11.2014, 19:33:34 via Website

Hallo,
die (gewiesene) Verzögerung ist nicht zu "Killen".
Lasse es mit den Libs, ...
Ein einfaches PHP (Ausruf) Script, erledigt "dein Schalten".

<?php
error_reporting(E_ALL);  // nicht zwingend jedoch ok
ini_set('display_errors', 1);  // nicht zwingend gehoert zusammen mit oberem

shell_exec("/....pfad..../script.xxx"); // ruft deinen Python / C+ ...???  Script auf 
?>

Fertig!
Nun wie gesagt - du wirst die (eine) Verzögerung nie! los bekommen.
Die Verzögerung (Verbindung / Aufbau) von der "Andriod Seite" ist schon relativ groß,
ABER! die Verzögerung (ehe Verarbeitung) der ARM v??? Architektur ist deutlich! langsamer. Es "liegt" so zusagen an deinem RPI.

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.11.2014, 19:47:13 via Website

@Georg: Gute Idee es mit php und einem Webserver lösen zu wollen! :)
Das ist warschinlich sogar das einfachste und relativ "schnell".

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg C.
  • Forum-Beiträge: 235

05.11.2014, 22:10:04 via Website

und wenn man den "lightly" bei RPI - an statt Apache nimmt, ... stimmt 100% -ig

LG
Georg
(das mit dem Zunge wollte ich auch mal machen) :P .... hihihi

Sorry für Gramatik & Stilistik Fehler.

Antworten
Maximilian Nocker
  • Forum-Beiträge: 4

12.01.2015, 18:13:56 via Website

Hallo ich mach auch gerade eine SSH app und so es auch in einem AsyncTask gemacht aber aus irgendeinem Grund funktioniert es nicht. Mir würde es sehr viel weiterhelfen wenn ich deinen Code sehen könnte, damit ich meinen Fehler finden kann.

— geändert am 12.01.2015, 18:14:25

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.01.2015, 18:16:29 via Website

Hallo Maximilian,
Herzlich wilkommen hier im Forum :)

Wie seht denn dein Code bisher aus?

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Maximilian Nocker
  • Forum-Beiträge: 4

12.01.2015, 19:19:41 via Website

Ja das wäre mein Code:

public class MainActivity extends ActionBarActivity {

private int num;
private Button plus;
private Button minus;
private Button settings;
private Button start;
JSch sshChannel;
Session session;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView text = (TextView) findViewById(R.id.number);
    String number = (String) text.getText();
    num = Integer.parseInt(String.valueOf(number));
    plus = (Button) findViewById(R.id.plus);
    plus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (num < 10) {
                num++;
                text.setText("" + num);
            } else {

            }
        }
    });

    minus = (Button) findViewById(R.id.minus);
    minus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (num > 1) {
                num--;
                text.setText("" + num);
            } else {

            }
        }
    });

    settings = (Button) findViewById(R.id.settings);
    settings.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(view.getContext(), Settings.class);
            startActivity(intent);

        }
    });


    start = (Button) findViewById(R.id.start);
    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            sshConnect task = new sshConnect();
            task.execute();


        }


    });


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}



public class sshConnect extends AsyncTask<String, Void, String> {



    @Override
    protected String doInBackground(String... data) {
        JSch jsch = new JSch();
        Session session= null;
        Properties props = new Properties();
        props.put("StrictHostKeyChecking", "no");

        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        config.put("compression.s2c", "zlib,none");
        config.put("compression.c2s", "zlib,none");

        try {
            session = jsch.getSession("root", "10.10.161.9", 22);

            //session.setConfig(config);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword("mixxxer123");

            session.connect();


        //String command="cd Desktop/ && python auto2.py";
            String command="echo $PWD";

            ChannelExec channel = (ChannelExec)session.openChannel("exec");
            //channel.setOutputStream(Baos);
            //channel.setInputStream(Bais);
            //Run Command
            channel.setCommand(command);
            //channel.setInputStream(null);
            //channel.setErrStream(System.err);
            channel.connect();


            try{Thread.sleep(3500);}catch (Exception ee){}

            channel.disconnect();
            session.disconnect();

        } catch (JSchException e1) {
            e1.printStackTrace();
            //Toast.makeText(getApplicationContext(), "blabla", Toast.LENGTH_SHORT).show();
        }





        return null;

    }

    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getApplicationContext(), "Executed", Toast.LENGTH_SHORT).show();

    }


}

}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

13.01.2015, 17:00:39 via Website

ich kann jetzt keine Fehler in deinem Code enddecken.
Vielleicht fügst du aber mal Log/Debug ausgaben hinzu, dammit du weisst an welcher Stelle/ ab welcher Stelle dein AsyncTask nicht mehr Funktioniert.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Informous
  • Forum-Beiträge: 17

17.01.2015, 09:45:15 via App

Hallo zusammen!

Ja, ich könnte dir meinen Code geben, allerdings ist er mir vorab abkommen...(Handy eingeschickt :-( )

Mfg
Informous

Edit:

Hast du den die Internet permission gesetzt?

— geändert am 17.01.2015, 09:52:19

Antworten