Java 向Raspberry Pi发送带有JSCH的SSH命令
我想写一个应用程序,用我的智能手机向我的Raspberry Pi发送SSH命令。我读到JSCH是一个不错的选择,所以我在Eclipse中将JSCH库包含到我的项目中 我创建了一个名为SSH.java的新类,并将此代码放入:Java 向Raspberry Pi发送带有JSCH的SSH命令,java,android,eclipse,ssh,jsch,Java,Android,Eclipse,Ssh,Jsch,我想写一个应用程序,用我的智能手机向我的Raspberry Pi发送SSH命令。我读到JSCH是一个不错的选择,所以我在Eclipse中将JSCH库包含到我的项目中 我创建了一个名为SSH.java的新类,并将此代码放入: package com.app.bondrucker; import java.io.ByteArrayOutputStream; import java.util.Properties; import com.jcraft.jsch.ChannelExec; impor
package com.app.bondrucker;
import java.io.ByteArrayOutputStream;
import java.util.Properties;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class SSH {
public static String executeRemoteCommand() throws Exception {
JSch jsch = new JSch();
Session session = jsch.getSession("pi", "192.168.2.10", 22);
session.setPassword("raspberry");
// 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("sudo shutdown -h now");
channelssh.connect();
channelssh.disconnect();
return baos.toString();
}
}
你能查一下我的密码吗
执行此行时,应用程序崩溃:
session.connect();
我用一个按钮启动JSCH代码,该按钮执行以下代码:
SSH.executeRemoteCommand();
以下是我按下按钮执行SSH命令时显示的LogCat消息:
08-04 22:00:38.668:D/libc29531:[NET]getaddrinfo+,hn 120x3139322e313638,序列号,族0,标志4
08-04 22:00:38.668:D/libc29531:[NET]getaddrinfo-,成功
08-04 22:00:38.668:W/dalvikvm29531:threadid=1:thread退出时未捕获异常组=0x41d4be18
08-04 22:00:38.678:E/ActivityManager 755:应用程序崩溃!流程:com.app.bondrucker
08-04 22:00:38.678:E/AndroidRuntime29531:致命异常:主
08-04 22:00:38.678:E/AndroidRuntime29531:Process:com.app.bondrucker,PID:29531
08-04 22:00:38.678:E/AndroidRuntime29531:java.lang.IllegalStateException:无法执行活动的方法
08-04 22:00:38.678:E/AndroidRuntime29531:at android.view.view$1.onClickView.java:3865
08-04 22:00:38.678:E/AndroidRuntime29531:at android.view.view.performClickView.java:4480
08-04 22:00:38.678:E/AndroidRuntime29531:at-android.view.view$PerformClick.runView.java:18686
08-04 22:00:38.678:E/AndroidRuntime29531:at-android.os.Handler.handleCallbackHandler.java:733
08-04 22:00:38.678:E/AndroidRuntime29531:at android.os.Handler.dispatchMessageHandler.java:95
08-04 22:00:38.678:E/AndroidRuntime29531:at android.os.Looper.Looper.java:157
08-04 22:00:38.678:E/AndroidRuntime29531:at-android.app.ActivityThread.mainActivityThread.java:5872
08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.Invokenactive Method
08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.invokeMethod.java:515
08-04 22:00:38.678:E/AndroidRuntime29531:com.android.internal.os.ZygoteInit$methodAndArgscaler.runZygoteInit.java:858
08-04 22:00:38.678:E/AndroidRuntime29531:com.android.internal.os.ZygoteInit.mainZygoteInit.java:674
08-04 22:00:38.678:E/AndroidRuntime29531:at dalvik.system.NativeStart.main本地方法
08-04 22:00:38.678:E/AndroidRuntime29531:由以下原因引起:java.lang.reflect.InvocationTargetException
08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.Invokenactive Method
08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.invokeMethod.java:515
08-04 22:00:38.678:E/AndroidRuntime29531:at-android.view.view$1.onClickView.java:3860
08-04 22:00:38.678:E/AndroidRuntime29531:。。。还有11个
08-04 22:00:38.678:E/AndroidRuntime29531:原因:com.jcraft.jsch.JSchException:java.net.SocketException:socket失败:EACCES权限被拒绝
08-04 22:00:38.678:E/AndroidRuntime29531:com.jcraft.jsch.Util.createSocketUtil.java:349
08-04 22:00:38.678:E/AndroidRuntime29531:com.jcraft.jsch.Session.connectSession.java:215
08-04 22:00:38.678:E/AndroidRuntime29531:com.jcraft.jsch.Session.connectSession.java:183
08-04 22:00:38.678:E/AndroidRuntime29531:com.app.bondrucker.SSH.executeRemoteCommandSSH.java:30
08-04 22:00:38.678:E/AndroidRuntime29531:com.app.bondrucker.MainActivity.selfDestructMainActivity.java:42
08-04 22:00:38.678:E/AndroidRuntime29531:。。。14多
08-04 22:00:38.678:E/AndroidRuntime29531:原因:java.net.SocketException:套接字失败:EACCES权限被拒绝
08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.IoBridge.socketIoBridge.java:576
08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.PlainSocketImpl.createPlainSocketImpl.java:201
08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.startupSocketSocket.java:590
08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.tryalLaddressSocket.java:128
08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.Socket.java:178
08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.Socket.java:150
08-04 22:00:38.678:E/AndroidRuntime29531:at com.jcraft.jsch.Util.createSocketUtil.java:343
08-04 22:00:38.678:E/AndroidRuntime29531:。。。还有18个
08-04 22:00:38.678:E/AndroidRuntime29531:原因:libcore.io.ErrnoException:套接字失败:EACCES权限被拒绝
08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.Posix.socketNative方法
08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.BlockGuardOs.socketBlockGuardOs.java:181
08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.IoBridge.socketIoBridge.java:561
08-04 22:00:38.678:E/AndroidRuntime29531:。。。还有24个
08-04 22:00:38.678:W/ActivityManager 755:Force finishing activity com.app.bondrucker/.main activity您有stacktrace吗?我制作了一个应用程序,它使用Jsch来ssh到raspber
我怎样才能得到stackstrace?在Eclipse中的Logcat中,我希望它会抛出NetworkOnMainThreadException。您应该研究如何通过使用AsyncTask来避免这种情况。我编辑了我的问题并将LogCat消息放入,因为我无法回答自己的问题。