2017-02-06 22 views
0

Я искал ответы на все вопросы через Интернет, и я продолжаю получать те же результаты, но все, что я хочу сделать, - это отправить командную строку на мой малиновый pi через ssh. Простите меня, если я полностью пропустил что-то действительно очевидное, но я знаю, что могу подключиться, потому что, если я набираю неправильное имя пользователя или пароль, я получаю сбой авторизации. Поэтому я связан, но ничего не происходит на моем малиновом пи. Это следующий мой текущий код:Jsch ssh to Rasperry Pi ничего не делает

package com.name.app.prynsofpi; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

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 { 

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

     new AsyncTask<Integer, Void, Void>(){ 
      @Override 
      protected Void doInBackground(Integer... params){ 
       try { 
        executeRemoteCommand("pi", "green1", "10.1.1.47", 22); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 

     }.execute(1); 

    } 

    public static String executeRemoteCommand(String usrname, String passwd, String hostname, int Port) throws Exception { 
     JSch jsch = new JSch(); 
     Session session = jsch.getSession(usrname, hostname, 22); 
     session.setPassword(passwd); 

     Properties prop = new Properties(); 
     prop.put("StrictHostKeyChecking", "no"); 
     session.setConfig(prop); 

     session.connect(); 

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

     channelssh.setCommand("ls"); 
     channelssh.connect(); 
     channelssh.disconnect(); 
     return baos.toString(); 
    } 
} 

Может кто-нибудь, пожалуйста, покажите мне, что не так ??? Должен ли я видеть команды на малине pi в терминале?

ответ

1

Вы не увидите команды на терминале pi. Когда вы устанавливаете соединение ssh, вы создаете новый процесс терминала, терминал, запущенный на вашем экране pi, не будет отображать ввод или команды, это не так, как работает ssh. Вам нужно будет захватить вывод и отобразить его на вашем устройстве Android.

Вы можете запустить who на своем писе, чтобы узнать, какие учетные записи подключены через ssh.

+0

aaahhh! Это должно было быть очевидно! Благодаря! – IJustNeedHelp

+0

Можете ли вы привести пример того, как я могу обновить свой код, чтобы распечатать текущие ответы на ssh? Я набираю «кто» и не вижу подключения к устройству (я не использую симулятор, я запускаю код на телефоне). ПРИМЕЧАНИЕ. Я могу использовать ssh в малиновом пие с помощью того же телефона или любого ноутбука и видеть связь в ответе. – IJustNeedHelp

+0

Вызовите 'channelssh.getInputStream();', чтобы получить поток, затем используйте считыватель потоков (например, BufferedReader) для чтения результатов. – ChrisStillwell

1

Can someone please show me what is wrong???

Я не вижу ничего плохого.

Should I see the commands on the raspberry pi in terminal?

Как ChrisStillwell сказал, вы создаете новый терминальный процесс и терминал работает на экране Pi не будет показывать посланные команды. Если вы пытаетесь увидеть результат отправленных команд, вы можете сохранить его в переменной String (Чтобы потом отобразить его на TextView или Toast):

@Override 
      protected Void doInBackground(Integer... params){ 
       try { 
        String result = executeRemoteCommand("pi", "green1", "10.1.1.47", 22); 
        Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 
+0

Это определенно будет моим последующим вопросом, но теперь с этим я получаю ошибку времени выполнения: «Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare()» – IJustNeedHelp

+0

По существу у меня есть программа, написанная на малине Pi, который запрашивает ввод пользователя для выполнения различных задач, и я хотел бы просто создать простой пользовательский интерфейс, чтобы эффективно делать это с помощью кнопок. – IJustNeedHelp

 Смежные вопросы

  • Нет связанных вопросов^_^