• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Android - połączenie ssh

Object Storage Arubacloud
0 głosów
581 wizyt
pytanie zadane 30 kwietnia 2017 w Android, Swift, Symbian przez shadou102 Pasjonat (21,630 p.)
zamknięte 30 kwietnia 2017 przez shadou102

Witam,
napisałem kod, który po ssh ma się łączyć z raspberry pi.
 

package com.example.filip.filip_app;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.jcraft.jsch.Channel;
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 MainActivity extends AppCompatActivity {

    public static String doCommand(String username, String password, String hostname, int port) throws Exception{

        JSch jsch = new JSch();
        Session session = jsch.getSession(username,hostname,port);
        session.setPassword(password);
        Properties prop = new Properties();
        prop.put("StrictHostKeyChecking", "no");
        session.setConfig(prop);

        session.connect();

        ChannelExec channelssh = (ChannelExec) session.openChannel("exec");
        ByteArrayOutputStream boas = new ByteArrayOutputStream();
        channelssh.setOutputStream(boas);

        channelssh.setCommand("lsusb > /home/pi/test.txt");
        channelssh.connect();
        channelssh.disconnect();
        return boas.toString();

    }

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

        Button btn = (Button) findViewById(R.id.btnSend);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
           public void onClick(View v) {
                new AsyncTask<Integer,Void,Void>(){
               protected Void doInBackground(Integer...params) {
                   try {
                       doCommand("root", "mypass", "192.168.1.100", 22);

                   } catch (Exception e) {
                       e.printStackTrace();
                   }
                   return null;
               }
            }.execute(1);
        }});

   }




}

Niestety nie wiem czemu aplikacja nic nie robi. W logach pi nie pojawia, się żadna informacja o próbie logowania. Telefon jest tej w samej sieci co pi, dodatkowo przy użyciu programu JuiceSSH wszystko działa jak należy. Czy, żeby wywołać połączenie trzeba coś jeszcze wykonać ?

komentarz zamknięcia: Problem rozwiązany.

1 odpowiedź

+1 głos
odpowiedź 30 kwietnia 2017 przez KubenQPL Maniak (62,820 p.)
wybrane 30 kwietnia 2017 przez shadou102
 
Najlepsza

Chcesz otrzymać informacje zwrotne od połączenia, tak?

Z tego co widzę to ustawiasz OutputStream dzięki któremu mógłbyś coś wysyłać a nie odczytywać. Musisz wziąć InputStream getInputStream, a potem to odczytać 

InputStream inputStream = channelssh.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    result.append(line);
}
String resultString = result.toString();

I to musiałbyś mieć między connect, a disconnect. Na temat samego SSH się nie wypowiem bo jeszcze nie korzystałem, podałem ci rozwiązanie analogiczne do działania innych połączeń (np HTTPUrlConnection)

komentarz 30 kwietnia 2017 przez shadou102 Pasjonat (21,630 p.)
Znaczy się w którymś momencie i informacja zwrotna by się przydała ale na razie chce w ogóle uzyskać połączenie. Bo na ten moment wszystko wskazuje na to, że nie łączy wcale.
komentarz 30 kwietnia 2017 przez KubenQPL Maniak (62,820 p.)

masz connect i disconnect zaraz po sobie więc to są ułamki sekund więc mogłeś nie zauważyć że w ogóle połączyło. 

komentarz 30 kwietnia 2017 przez shadou102 Pasjonat (21,630 p.)
I z założenie ja chcę wysłać.

Chce uzyskać taki efekt: po naciśnięciu buttona aplikacja łączy sie z raspberry i wykonuje konkretne polecenie np. touch plik.txt.
komentarz 30 kwietnia 2017 przez shadou102 Pasjonat (21,630 p.)
Masz racje ja mogę tego nie odnotować ale w logach w pi taka informacja powinna być, niestety nie ma co wskazuje na to, że połączenia nie ma wcale.
komentarz 30 kwietnia 2017 przez KubenQPL Maniak (62,820 p.)

to odbierz InputStream Errora i zobacz co ci podaje jako powód tu masz funkcje

komentarz 30 kwietnia 2017 przez shadou102 Pasjonat (21,630 p.)
Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
komentarz 30 kwietnia 2017 przez KubenQPL Maniak (62,820 p.)
Masz w manifeście zezwolenie na korzystanie z internetu?
komentarz 30 kwietnia 2017 przez shadou102 Pasjonat (21,630 p.)
Fakt nie mam zaraz dodam i zobaczę czy działa
1
komentarz 30 kwietnia 2017 przez shadou102 Pasjonat (21,630 p.)
Działa jak należy :) Dziękuję za konkretną pomoc

Podobne pytania

0 głosów
1 odpowiedź 135 wizyt
0 głosów
4 odpowiedzi 2,080 wizyt
+1 głos
1 odpowiedź 1,308 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...