Android studio - ssh

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Le_Ze 29. 4. 2016 21:10

Zdar klucí.
Mam Android studio par dní a zkouším.
Potřeboval bych jen 3 věcí.

První je:
Vytvořit v arduinu tlačitka (už vim jak na to)
V MainActivity na něj vytvořim odkaz.

public void tlacitko1(View v) {
}

Potřebují přes toto tlačitko poslat nějaký přikaz přes ssh na raspi
https://www.raspberrypi.org/forums/view ... 2&p=439253

Nenajde se tu nějaka dobra duše co poradí a pomuže?

Zkoušel jsem toto.
Kód: Vybrat vše
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.connection.channel.direct.Session;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public static void main(String... args)
            throws IOException {
        final SSHClient ssh = new SSHClient();

        ssh.connect("192.168.1.5, 22");
        try {
            ssh.authPassword("pi","mojeheslo");
            final Session session = ssh.startSession();
            try {
                final Session.Command cmd = session.exec("echo raspberry | sudo -S reboot");
            } finally {
                session.close();
            }
        } finally {
            ssh.disconnect();
        }
    }

}


Normalně se to v mem připojenem mobilu spustí ale nějak to nefunguje.
Raspi furt žije.
Le_Ze
Junior

Odeslat příspěvekod Le_Ze 1. 5. 2016 14:25

Hm.Koukam že dobre duše vymřeli :-!
Le_Ze
Junior

Odeslat příspěvekod Just_jo 1. 5. 2016 15:49

Nedá se to nějak debugovat? Např. dodělat výpis chyb při selhání ssh v TRY sekcích.

U Raspi nevím jestli to jde.

Sám mám problém vytvořit UDP spojení android / win aplikace
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Le_Ze 2. 5. 2016 07:18

Tak pry toto není pro android 8-S
Pry android nepouživa public static void main

Kdyby někdo věděl jak na a byl by ochoten pomoct.
Jeden button přes který odešlu nějaký linux příkaz.
Le_Ze
Junior

Odeslat příspěvekod Epe 2. 5. 2016 12:59

na webu jsou stovky/tisice prikladu...


Kód: Vybrat vše
    Button btnRestart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnRestart = (Button)view.findViewById(R.id.systeminfo_btnRestart);
        btnRestart.setOnClickListener(restartListener);
    }

    View.OnClickListener restartListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              final SSHClient ssh = new SSHClient();
              //...
        }
    };

Epe
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod Le_Ze 2. 5. 2016 14:32

Jsem už zkoušel. :-!

Kód: Vybrat vše
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void spust(View v) throws IOException {
        final SSHClient ssh = new SSHClient();
        ssh.connect("192.168.1.5, 22");
        try {
           // ssh.authPassword(pi, raspberry);
            ssh.authPassword("pi","raspberry");
            final Session session = ssh.startSession();
            try {
                final Session.Command cmd = session.exec("echo raspberry | sudo -S reboot");
            } finally {
                session.close();
            }
        } finally {
            ssh.disconnect();
        }
    }
}


ssh.authPassword(pi, raspberry); //to nevezme cannot resolve symbol
ssh.authPassword("pi","raspberry"); //takto je to ok

Po kliknuti na button apka spadne

Když se připojím přes putty tak mam pi@raspberrypi:~ $
Takže
final Session.Command cmd = session.exec("echo raspberry | sudo -S reboot");
Misto echo raspberry
By mělo byt raspberrypi, ne?
Le_Ze
Junior

Odeslat příspěvekod Epe 2. 5. 2016 18:48

Kde to spadne? s jakou chybou?
vypada to, ze o programovani asi ani nemas paru.
Nebude jednodussi pouzit jiz existujici program?
JuiceSSH
nebo
RasPi Check
Epe
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod Le_Ze 2. 5. 2016 19:25

Nespouštim to přes emulator ale přes tablet.
Normalně apka najede.
Po kliknutí na buton to vyhodí "aplikae přestala pracovat"
Žadnou chybu to nevyhazuje.
Le_Ze
Junior

Odeslat příspěvekod kuba77 2. 5. 2016 20:30

Do toho bloku try by to chtělo kromě větve finally přidat i catch větev, která by mohla odchytit chybu a taky by zabránila spadnutí aplikace.
kuba77
Junior

Odeslat příspěvekod Le_Ze 2. 5. 2016 21:36

Jsem zkoušel i toto
http://stackoverflow.com/questions/1432 ... -with-jsch

Kód: Vybrat vše
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    public void spust(View v) throws IOException {
        try {
            executeRemoteCommand("pi","heslo","192.168.1.5",22);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    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("lsusb > /home/pi/test.txt");
        channelssh.connect();
        channelssh.disconnect();
        return baos.toString();
    }
    }


Normalně apka funguje ale na raspi se to vubec nepřipojí.
V logech vubec nevídim, že by se to pokoušelo připojít.
Když kliknu dole na debug tak tam je
Connected to the target VM, address: 'localhost:8616', transport: 'socket'
Le_Ze
Junior

Odeslat příspěvekod Epe 3. 5. 2016 06:55

Opět a znovu: ve kterém místě a na jakou chybu to spadne? Křišťálovou kouli tady nikdo nevede, takže nikdo nemůže vědět, kde je problém.
Opravdu není jednodušší používat již hotové aplikace pro SSH - tam si taky můžeš uložit často pužívané příkazy.

Jinak mě napadá co třeba oprávnění pro přístup k síti? máš?
Epe
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod Le_Ze 3. 5. 2016 07:59

No psal jsem že android studio mam par dní, takže lama.
Emulátor mi nefunguje.
Píše mi to že to nepodporuje můj procesor.
Tedy to zkouším přímo na připojeném tabletu.
Mam jen 1 button.
Dam run app.
Apka se spustí.
Kliknu ba button a cela aplikace spadne.
V buttonu jsem nechal jen toto a stejnak to spadne

Kód: Vybrat vše
public void spust1(View v) throws IOException {
       final SSHClient ssh = new SSHClient();
        }

http://www.fastimages.eu/images/errorfpf.png

Určitě je jednodušší použit nějako apku.
Nenašel jsem zatím žádnou co by mi vyhovovala.
Pokud třeba pošlu příkaz pro sepnutí GPIO na expanderu MCP23017 přes již udělanou apku, jak poznám, že se fakt sepnul?
Pokud zvládnu odesílat a stahovat data s raspi přes ssh, pak už to bude jednoduché.

Jinak mě napadá co třeba oprávnění pro přístup k síti? máš?

Pokud bylo myšleno v AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
Tak jo.

Zkoušel jsem totéž udělat v delphi.
I když znám také jen základy se školy což bylo před 25 lety, zvládl jsem to za 3 hodinky.

Netušil jsem, že bude takoví problém vytvořit 1 button přes který odešli nějaký příkaz.

Jinak dik moc za snahu pomoct. ;-)
Le_Ze
Junior

Odeslat příspěvekod Epe 3. 5. 2016 08:15

tu knihovnu SSHClient mas pridanou do android studia?

http://stackoverflow.com/a/29207596
Epe
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod Just_jo 3. 5. 2016 08:38

Zjištění problému řeším vytvořením TextView.
Následně u CATCH hodím výpis chyby do něho
( místo e.printStackTrace(); použiju toto )
Kód: Vybrat vše
TextView txt1 = (TextView) findViewById(R.id.textView);
txt1.append("IOException : " + e.toString());
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Le_Ze 3. 5. 2016 08:42

V tom članku doporučují sshj-0.8.1.
https://github.com/hierynomus/sshj/downloads
http://www.fastimages.eu/images/liblfl.png
Kdyby byl problem s knihovnami, byli by zašedle importy a nespustil bych to,ne?
Le_Ze
Junior

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků