android - 与 JSch 的简单 SSH 连接

标签 android ssh jsch

我正试图从这个简单的例子中得到一些东西:

SSH, execute remote commands with Android

我只是想看看我是否可以使用 SSH 从我的 android 手机连接到 linux 服务器,但它不起作用...

这是我的主要代码:

package com.example.ssh;

import java.util.Properties;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import android.os.Bundle;
import android.app.Activity;

 public class MainActivity extends Activity {

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

    try
    {
        JSch jsch = new JSch();
          Session session = jsch.getSession("root","192.168.0.26", 22);
          session.setPassword("xxxxx");

          // Avoid asking for key confirmation
          Properties prop = new Properties();
          prop.put("StrictHostKeyChecking", "no");
          session.setConfig(prop);

          session.connect();

    }
    catch (Exception e)
    {
      System.out.println(e.getMessage());
    }
}
}

我做错了什么?我没有错误消息,也没有在我的 Linux 上看到任何 SSH 连接。我添加了库 jsch 和 jzlib。我可以毫无问题地连接到 Putty session 。

EDIT1:事实上,我发现了一个错误,它解释了为什么即使我不知道如何解决问题它也不起作用。错误是:

android.os.NetworkOnMainThreadException

所以这似乎意味着该应用程序无法在其主线程上执行网络操作...

最佳答案

您必须在另一个线程中执行该代码,这样您就不会挂起 UI 线程,这就是该异常的含义。如果 UI 线程正在执行网络调用,则它无法重新绘制 UI,因此当应用程序等待网络调用完成时,您的用户会看到一个没有响应的卡住 UI。 Android 想要避免像这样糟糕的用户体验,所以它通过抛出这个异常来阻止你做这样的事情。

您的 onCreate() 方法应该调用另一个线程(我建议在原始线程上使用 AsyncTask)来执行 SSH 连接。完成后,它可以将结果发回 UI 线程,并从 UI 线程安全地更新应用程序的 UI。

http://developer.android.com/reference/android/os/AsyncTask.html

关于android - 与 JSch 的简单 SSH 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323661/

相关文章:

java - Android,我如何在 Controller 中使用 hellper 方法的回调?

android - Android 上通过 JSCH 的基本 SSH 连接

Android Java 应用程序 Jsch 使用按钮发送命令

git - 如何使用 ssh 在 puppet 中使用 vcsrepo 设置和 checkout git 存储库

使用 USB 在 PC 应用程序和 iPhone 应用程序之间进行 iPhone 交互

linux - 增加ssh超时

android - 使用JSch从Android上的SFTP文件传输进行慢速传输

android - 防止媒体扫描仪扫描在 Android 上使用 DownloadManager 下载的 JPG? (开发商)

android - 如何获取屏幕打开的时间

android - Android API 16 及更高版本上图层列表中的矢量可绘制对象