Android studio, SSH an Raspberry

schnibli

Mitglied
Hallo,
Ich bin auf euer Forum gestoßen weil ich ein kleineres Problemchen habe :)
Daher auch gleich an meinem ersten tag meine Frage :)

Wunsch:
Ich würde gerne mit meinem Android App SSH befehler an meinen Raspberry pi senden.
Meine ersten versuche startete ich mit jsch.
Hier mal mein Code:
Code:
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootview = inflater.inflate(R.layout.menu3_layout, container, false);

        final Button btn_energy = (Button) rootview.findViewById(R.id.btn_energy);
        btn_energy.setOnClickListener(
                new Button.OnClickListener() {
                    public void onClick(View v) {
                        ClientAsyncTask clientAST = new ClientAsyncTask();
                    }
                }
        );

        return rootview;
    }

    ClientAsyncTask clientAST = new ClientAsyncTask();

    class ClientAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
            String result = null;
            try {
                JSch jsch = new JSch();
                Session session = null;

                session = jsch.getSession("root", "192.168.61.93", 22);

                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("mpc stop");
                channelssh.connect();
                channelssh.disconnect();

            } catch (JSchException e) {

            }
            return result;
        }
    }
}

Nun es erscheinen Keine Fehler und es passiert auch nichts, daher denke ich, dass ich Grundlegend einen Fehler habe.

Zusätzlich währe es noch so das ich 2 Raspberry Pi's habe und je nach Button den Befehl an den einen oder an den anderen Raspberry pi gesendet werden soll.

Ich hoffe ich stoße hier auf Hilfreiche Personen :)

Freundliche Grüsse
 

dzim

Top Contributor
Ich hab leider noch nichts mit jsch gemacht, daher bin ich da etwas überfragt. Hast du das denn schon mal von einem regulären Java-Programm aus ausgeführt und geschaut, was da passiert?
Vielleicht auch auf dem Raspi mal mit tcpdump oder so tracen und schauen, ob die Verbindung überhaupt aufgemacht wird.

Grundsätzlich aber wäre es hilfreich, wenn du eventuelle JSchExceptions auch loggen würdest: Deine Anwendung (bzw. dein Task) dropped diese im Moment still und heimlich.
android.util.Log.<v|d|i|w|e>(tag, message[, throwable]);
Heisst: Es kann schon Exceptions geben, du bekommst sie nur nie mit...
 
Zuletzt bearbeitet:

schnibli

Mitglied
Hallo ich konnte es erfolgreich lösen :) ...
Code:
/**
 * Created by Roger on 13.03.2015.
 */
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import java.io.ByteArrayOutputStream;
import java.util.Properties;


public class SSH {
    public static String executeRemoteCommand() throws Exception {
        JSch jsch = new JSch();
        Session session = jsch.getSession("root", "192.168.61.93", 22);
        session.setPassword("schneider");


        // 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("mpc stop");
        channelssh.connect();
        channelssh.disconnect();

        return baos.toString();
    }
}
Code:
  btn_werk_srf3.setOnClickListener(
                new Button.OnClickListener() {
                    public void onClick(View v) {

                        new AsyncTask<Integer, Void, Void>(){
                            @Override
                            protected Void doInBackground(Integer... params) {
                                try {
                                    executeRemoteCommand("root","123451234","192.168.61.11", 22, "mpc play 4");
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                                return null;
                            }
                        }.execute(1);
                    }
                }
        );

    public static String executeRemoteCommand(String username,String password,String hostname,int port, String message)
            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(message);
        channelssh.connect();
        channelssh.disconnect();

        return baos.toString();
    }
Danke!!
 

ollifred

Neues Mitglied
Hallo, ich würde gerne den Beitrag nochmal aufnehmen.
Ich habe den Code so probiert und es funktioniert auch wunderbar. Hab jetzt meine App aufs Handy gespielt, um damit meinen Raspberry als Webradio mit mpd zu steuern. Auch diese Funktion funktioniert, jedoch reagiert das ganze sehr träge. Bis ein Befehl vom Handy umgesetzt wird dauert es ca. 6-8 Sekunden. Gibts ne Möglichkeit das zu beschleunigen?
 

buggy84

Bekanntes Mitglied
Es scheint, du baust immer die Verbindung neu auf. Das dauert natürlich.
Vielleicht wäre es einfacher, die ssh verbindung offen zu lassen, und erst ab einer bestimmten Zeit wieder zu schließen.

Vielleicht etwas umständlich gelöst im Moment.
 

f__lix

Mitglied
Hallo zusammen,
ich scheiter leider schon bei dem Einbinden des Packages.
Der Kompiler wirft mir ein Fehler bei dem Import.

Jetzt die Frage : Wie kann ich das Package richtig einbinden ? Wo muss ich es runterladen ?

Wäre euch für die Infos sehr danbar.

Liebe Grüße

Felix
 

f__lix

Mitglied
Hallo Vfl,

danke für die schnelle Antwort.
Bitte enschuldige meine ungenauen Angaben.

Ich habe ein Beispielprojekt in Android Studio erstellt. Anschließend wollte ich per Buttonklick eine Nachricht per SSH an ein LinuxDistro zu senden -> soviel zu dem Hintergrund.

Ich erstelle also ein Beispielprojekt und kopiere die Imports :

import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

darauffolgend wird jcraft rot unterstrichen.

Ich nehme an dass ich die Bibliothek erst einbinden muss.

Also habe ich das Paket heruntergeladen, jedoch enthält der Ordner diverse Dateien und ich weiss nicht wie ich die Bibliothek einbinden muss/kann und welche Datei benötigt wird.

Danke im Vorraus.
 

VfL_Freak

Top Contributor
Moin,
Ich nehme an dass ich die Bibliothek erst einbinden muss.
Also habe ich das Paket heruntergeladen, jedoch enthält der Ordner diverse Dateien und ich weiss nicht wie ich die Bibliothek einbinden muss/kann und welche Datei benötigt wird.
Also ich kenne die LIB natürlich auch nicht (habe den Link nur kurz für Dich gegooglet) :D
Aber ich denke doch mal, dass es dann irgendein lib-Verzeichnis geben wird, aus der du die 'passende' LIB in Deinen BuildPath einfügen kannst!
Gibt es denn keine readme-Datei oder ähnliches ??

Gruß Klaus
 

f__lix

Mitglied
Also müsste ich in dem gedownloadetem Ordner eine .lib Datei finden, die ich dann in Android studio importieren muss ? Wie binde ich eine solche Datei in Android Studio ein ?

Auf deren Website steht folgender Kommentar:
"JSch is in pure Java, but it depends on JavaTM Cryptography Extension (JCE). JSch has been known to work with:"

Ich brauche also diese JCE erweiterung um die Lib zu benutzen? Oder ist die Lib bereits in der Erweiterung enthalten ?
 

f__lix

Mitglied
Ich glaube ich habe mich etwas verrannt.
Habe jetzt von einer anderen Quelle eine .jar Datei herunter geladen.

Glaube ich muss diese nur noch in Android Studio importieren.

Bin ich in der Annahme richtig ?
 

buggy84

Bekanntes Mitglied
Bin ich in der Annahme richtig, dass bei Dir sämtliche Grundlagen fehlen? Ich glaube, Du solltest Dich zuerst in deine IDE einarbeiten (kleines Stichwort: Gradle).
Da kannst Du hier fragen was Du willst, niemand kann Dir das Grundgerüst abnehmen. Und dann, irgendwann wenn Du fertig bist, kannst Du Sachen wie SSH machen.
 

maksimilian

Mitglied
Hallo schnibli,
ich hoffe, Du lebst noch :) Ich bin auf der Suche nach einer Methode, eine SSH-App für Android selber zu implementieren (Fernsteuerung einer Pi-Anwendung). Bei meiner Recherche stoße ich auf diesen schon etwas altenThread. Vielleicht meldest Du Dich oder jemand anderer, der mir beim Start behilflich sein möchte.
Ich wollte eigentlich die App mit Kotlin implementieren. Da finde ich aber bisher noch keine Beispiele, hätte aber auch kein Problem damit, in Java zu programmieren
 
K

kneitzel

Gast
Also so einen alten Thread aufwärmen dürfte kaum etwas bringen.

Schau Dir mal die Library jsch an - das ist auch das, was der TE versucht hat zu benutzen. Die kannst Du auch aus Kotlin heraus nutzen.

Aber bei Problemen und so: Bitte eigenen Thread eröffnen und dann können wir Dir ggf. auch weiter helfen.
 

maksimilian

Mitglied
Danke für die schnelle Reaktion. Bin ja froh, dass sich jemand meldet. Ich werde einen neuen Thread aufmachen. Interessant ist die Aussage, dass jsch auch mit Kotlin benutzt werden kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Repository bei Room-Database in Android Studio (Java) Android & Cross-Platform Mobile Apps 2
W In Android Studio Integer an andere activities übergeben Android & Cross-Platform Mobile Apps 2
wladp Android Studio Room Database Android & Cross-Platform Mobile Apps 1
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
K BLE Komunikation mit Android studio und esp32 Android & Cross-Platform Mobile Apps 5
M Paper DB wird in Android Studio nicht erkannt Android & Cross-Platform Mobile Apps 7
lolcore Android Studio -Download Documentation for Android SDK Android & Cross-Platform Mobile Apps 0
W Problem mit Android Studio Android & Cross-Platform Mobile Apps 0
OSchriever Auf onClick-Listener reagieren und Parameter übergeben (Android Studio) Android & Cross-Platform Mobile Apps 4
W Variable überschreiben (Android Studio) Android & Cross-Platform Mobile Apps 2
ruutaiokwu Android Warum muss man bei Android Studio immer 2x auf "Run" klicken damit die App auf dem Gerät startet Android & Cross-Platform Mobile Apps 8
ruutaiokwu Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Komponenten positionieren in Android Studio 3.6.3 Android & Cross-Platform Mobile Apps 1
M Android Studio - Property-Fenster einblenden Android & Cross-Platform Mobile Apps 1
M Android Studio - App auf dem Smartphone testen Android & Cross-Platform Mobile Apps 7
M Android Studio - Configuration fehlt Android & Cross-Platform Mobile Apps 20
M Unsupported class file major version 57 - Fehlermeldung bei Android Studio Android & Cross-Platform Mobile Apps 27
ruutaiokwu Android Studio (SDK) ANDROID_SDK_ROOT-Variable? Android & Cross-Platform Mobile Apps 5
J Android Studio macht seltsame Sachen Android & Cross-Platform Mobile Apps 2
J Android 9.1 aber android Studio findet API22 Android & Cross-Platform Mobile Apps 0
Dimax Web-Seite in native app convertieren mit Android Studio Android & Cross-Platform Mobile Apps 8
A Android Studio: while-Schleife beginnt nicht Android & Cross-Platform Mobile Apps 5
lolcore android studio: fehler bei laden des emulators Android & Cross-Platform Mobile Apps 10
A Android-Studio: 2. Layout nach kurzer Zeit aufzeigen Android & Cross-Platform Mobile Apps 2
A jpg wird im Android Studio nicht akzeptiert Android & Cross-Platform Mobile Apps 3
J Android Studio - ArrayList - Selected Item ermitteln Android & Cross-Platform Mobile Apps 13
A Android Studio: ImageView verpixelt Android & Cross-Platform Mobile Apps 2
J intend Service im Android Studio Android & Cross-Platform Mobile Apps 4
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
Arif Android Android Studio: Fehler beim Einbinden fremder Bibliothek? Android & Cross-Platform Mobile Apps 2
A Android Studio - App mit Nearby Android & Cross-Platform Mobile Apps 1
Jackii Android Android Studio Error im Testlauf ohne zu programmieren Android & Cross-Platform Mobile Apps 9
B Android Probleme mit Android Studio Android & Cross-Platform Mobile Apps 6
E Wie erhalte ich Zugriff auf das Microfon? (Android Studio) Android & Cross-Platform Mobile Apps 9
L Android Android Studio - Exportierte APK funktioniert nicht Android & Cross-Platform Mobile Apps 6
A Beginnen mit Serverkommunikatsion in Android Studio Android & Cross-Platform Mobile Apps 6
E Android Studio Android & Cross-Platform Mobile Apps 15
L Android Android Studio Setup killt Explorer Android & Cross-Platform Mobile Apps 3
J Variable in strings.xml (Android Studio) Android & Cross-Platform Mobile Apps 0
B Android Android Studio lässt PC abstürzen Android & Cross-Platform Mobile Apps 3
Light Lux Fehlermeldung unter Android Studio Android & Cross-Platform Mobile Apps 1
A Android Android Studio Emulator Problem Android & Cross-Platform Mobile Apps 1
S Android Studio Bluetooth App Problem Android & Cross-Platform Mobile Apps 6
Maresuke Android Android Studio & Bitbucket Android & Cross-Platform Mobile Apps 0
S Software-Tastatur des Android-Studio-Emulators öffnen? Android & Cross-Platform Mobile Apps 0
S Android Studio Emulator falsch eingestellt? Android & Cross-Platform Mobile Apps 1
N Blackscreen bei while-Schleife? (Android-Studio) Android & Cross-Platform Mobile Apps 2
S Android Studio MySql Daten in Listview mit sub Item Android & Cross-Platform Mobile Apps 11
H Android Android Studio mit NDK ünterstützung, wann? Android & Cross-Platform Mobile Apps 1
T Android MSSQL Verbindung herstellen - Android Studio Android & Cross-Platform Mobile Apps 2
J Benachrichtigung Freigabe ab Android 14 Android & Cross-Platform Mobile Apps 1
J Android Benachrichtigung zum Zeitpunkt ers Android & Cross-Platform Mobile Apps 15
J Das Beispiel von Android erzeugt Fehler Android & Cross-Platform Mobile Apps 8
J Zeitdifferenzen unter Android 7 (API < 26) berechnen Android & Cross-Platform Mobile Apps 4
W Netzwerk Verbindungen Java Android Android & Cross-Platform Mobile Apps 107
Z Android IntelliJ Android & Cross-Platform Mobile Apps 2
Android App auf das eigene Handy bekommen Android & Cross-Platform Mobile Apps 3
Alex IV Android App erstellen Android & Cross-Platform Mobile Apps 3
OnDemand CrossPlatform Kotlin iOs/Android Datenverbrauch Android & Cross-Platform Mobile Apps 2
N "Schöne" Datatable in Android und setzen von Parametern von Textview im Code Android & Cross-Platform Mobile Apps 5
N Android game programmieren Android & Cross-Platform Mobile Apps 5
G Android UDP Kommunikation Android & Cross-Platform Mobile Apps 1
J Android zugrif auf Thread nach Handy drehen. Android & Cross-Platform Mobile Apps 10
T Android Android Augmented Faces in Java. Neue Landmarks erstellen Android & Cross-Platform Mobile Apps 1
K Android Android In-App-Purchase lädt nicht Android & Cross-Platform Mobile Apps 0
Besset Android http request an interne ip adresse funktioniert nicht Android & Cross-Platform Mobile Apps 8
J Is Android Development Head First Outdated? Android & Cross-Platform Mobile Apps 3
J Android Android Datenbankverbindung zum Raspberry Pi Android & Cross-Platform Mobile Apps 1
S Sinnvollste weg eine SQLite DB mit Android auslesen Android & Cross-Platform Mobile Apps 7
W App Abo Android Android & Cross-Platform Mobile Apps 10
OSchriever Android Android MediaPlayer bei Anruf stoppen/pausieren Android & Cross-Platform Mobile Apps 2
W removeNetwork Android App mit Spendenaktion fürs Tierheim! Android & Cross-Platform Mobile Apps 1
T Android R.string.test+i Problem Android & Cross-Platform Mobile Apps 2
P undefinierbarer Fehler Android Android & Cross-Platform Mobile Apps 8
T Android ArrayList sortieren mit 2 Werten ohne thencomparing , Wie? Android & Cross-Platform Mobile Apps 10
ruutaiokwu Android Selbst entwickelter SMTP-Client läuft auf PC, nicht aber auf Android Android & Cross-Platform Mobile Apps 9
ruutaiokwu Android Wo das 'android.useAndroidX' property hinzufügen? Android & Cross-Platform Mobile Apps 8
ruutaiokwu Android In einem Android-“Spinner”-Element GLEICHZEITIG Bild (links) UND Text (rechts) anzeigen Android & Cross-Platform Mobile Apps 0
P Login und Registrierung Android Anzeige Android & Cross-Platform Mobile Apps 7
S Von JavaFx zu Android Android & Cross-Platform Mobile Apps 12
K Android to Pi | Websocket Problem Android & Cross-Platform Mobile Apps 3
M Barrierefreie Appentwicklung für Android - Suche Codebeispiele Android & Cross-Platform Mobile Apps 8
M Wo kann ich das Android SDK herunterladen / wie kann ich es installieren Android & Cross-Platform Mobile Apps 3
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
J Android App - Browser öffnen und Text eingeben/Button click auslösen Android & Cross-Platform Mobile Apps 10
T Android SDK-Manager startet nicht in Eclipse Android & Cross-Platform Mobile Apps 5
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
J Was soll das bedeuten ? does not require android.permission.BIND_JOB_SERVICE permission Android & Cross-Platform Mobile Apps 7
L Android Android Development eventuell mit Flutter Android & Cross-Platform Mobile Apps 1
S Android Layout - welchen Typ? Android & Cross-Platform Mobile Apps 3
L Android Android Contacts DB auslesen Android & Cross-Platform Mobile Apps 1
L Android content URI Datei einlesen Android & Cross-Platform Mobile Apps 9
N Android Game Background Service Android & Cross-Platform Mobile Apps 11
Excess Android Service läuft nicht in Sandby weiter Android & Cross-Platform Mobile Apps 2
B Android Projekt für Android und IOS erstellen? Android & Cross-Platform Mobile Apps 5
J App funktioniert auf Android 5, auf 6 nicht Android & Cross-Platform Mobile Apps 2
J Android Snake Android & Cross-Platform Mobile Apps 15
J Android TaschenRechner Android & Cross-Platform Mobile Apps 22
I Das Problem mit der Tastatur... android:windowSoftInputMode="adjustPan" Android & Cross-Platform Mobile Apps 1
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3

Ähnliche Java Themen

Neue Themen


Oben