Jsch ssh 到 Raspberry Pi 什么都不做
Jsch ssh to Rasperry Pi does nothing
我一直在整个互联网上搜索答案,但我一直得到相同的结果,但我只想通过 ssh 将命令行指令发送到我的 raspberry pi。如果我完全错过了一些非常明显的东西,请原谅我,但我知道我能够连接,因为如果我输入不正确的用户名或密码,我将获得身份验证失败。所以我已连接,但我的 raspberry 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();
}
}
谁能告诉我哪里出了问题???我应该在终端中看到 raspberry pi 上的命令吗?
您不会在 pi 的终端上看到这些命令。当您建立 ssh 连接时,您正在创建一个新的终端进程,您 pi 屏幕上的终端 运行ning 不会显示输入或命令,这不是 ssh 的工作方式。您需要捕获输出并将其显示在您的 Android 设备上。
您可以 运行 who
在您的 pi 上查看通过 ssh 连接的帐户。
Can someone please show me what is wrong???
我没有发现任何问题。
Should I see the commands on the raspberry pi in terminal?
正如 ChrisStillwell 所说,您正在创建一个新的终端进程,您 pi 屏幕上的终端 运行 不会显示已发送的命令。如果你想查看发送命令的结果,你可以将它存储在一个字符串变量中(稍后在 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;
}
我一直在整个互联网上搜索答案,但我一直得到相同的结果,但我只想通过 ssh 将命令行指令发送到我的 raspberry pi。如果我完全错过了一些非常明显的东西,请原谅我,但我知道我能够连接,因为如果我输入不正确的用户名或密码,我将获得身份验证失败。所以我已连接,但我的 raspberry 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();
}
}
谁能告诉我哪里出了问题???我应该在终端中看到 raspberry pi 上的命令吗?
您不会在 pi 的终端上看到这些命令。当您建立 ssh 连接时,您正在创建一个新的终端进程,您 pi 屏幕上的终端 运行ning 不会显示输入或命令,这不是 ssh 的工作方式。您需要捕获输出并将其显示在您的 Android 设备上。
您可以 运行 who
在您的 pi 上查看通过 ssh 连接的帐户。
Can someone please show me what is wrong???
我没有发现任何问题。
Should I see the commands on the raspberry pi in terminal?
正如 ChrisStillwell 所说,您正在创建一个新的终端进程,您 pi 屏幕上的终端 运行 不会显示已发送的命令。如果你想查看发送命令的结果,你可以将它存储在一个字符串变量中(稍后在 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;
}