Jsch ssh对Rasperry Pi什么都不做

时间:2017-02-06 20:56:20

标签: java android ssh raspberry-pi jsch

我一直在互联网上搜索答案,我一直都得到相同的结果,但我想做的就是通过ssh将命令行指令发送到我的覆盆子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上的命令吗?

2 个答案:

答案 0 :(得分:2)

您无法在pi终端上看到命令。当你建立一个ssh连接时,你正在创建一个新的终端进程,在你的pi屏幕上运行的终端不会显示输入或命令,这不是ssh的工作方式。您需要捕获输出并将其显示在Android设备上。

您可以在您的pi上运行who,以查看通过ssh连接的帐户。

答案 1 :(得分:1)

  

有人可以告诉我出了什么问题???

我没有看到任何错误。

  

我应该在终端上看到覆盆子pi上的命令吗?

就像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;
            }