当前位置: 首页 > 知识库问答 >
问题:

实现JSch在android应用程序中运行ssh命令

敖子安
2023-03-14

我目前正在尝试编写一个android应用程序,该应用程序通过ssh对远程机器执行简单的“ls”命令。我尝试使用JSch和此页面,但似乎不起作用。我环顾四周,似乎必须实现一些Async任务来运行代码。以下是当前主要活动的整个代码:

package com.sshtest.sshtest;

import android.app.Activity;
import android.os.Bundle;
import android.os.AsyncTask;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import java.util.Properties;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.*;

import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import java.lang.String;




public class MainActivity extends Activity {

    String string;

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


private class sshconnection extends AsyncTask<String, Void, String> {

    protected String doInBackground(String... params) {

        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession("name", "ipaddress", 22);
            session.setPassword("password");

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

            session.connect();

            ChannelExec channel = (ChannelExec)session.openChannel("exec");
            channel.setCommand("ls");
            channel.connect();

            InputStream input = channel.getInputStream();


            channel.disconnect();






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


    }

    @Override
    protected void onPostExecute(String result) {
        TextView txt = (TextView) findViewById(R.id.txtipinfo);
        txt.setText("Executed");

    }


}
  • 在Androidanifest.xml中添加uses-权限android: name="android.permission.INTERNET"

这是我第一次尝试任何严肃的编码,如果有人能帮助它将不胜感激。谢谢!

共有1个答案

冀啸
2023-03-14

如果您只是想测试。尽量不要使用Asyncask,而只是一个线程...像这样

        new Thread(new Runnable() {
        @Override
        public void run() {

            Session session;
            JSch jsch;
            try {
                jsch = new JSch();
                jsch.addIdentity(privateKey, "yourprivatekey");
                session = jsch.getSession("git", "github.com", 22);
                session.setPassword("yourpass");

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

                session.connect();

                if(session.isConnected()){
                    System.out.println(this.getClass().getSimpleName() + " CONNECTED");
                    System.out.println(this.getClass().getSimpleName() + " YOO " + jsch.getIdentityRepository().getName()+" "+session.getClientVersion() + " " + session.isConnected());
                }else{
                    System.out.println(this.getClass().getSimpleName() + " NOT CONNECTED");
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }).start();

在主活动的onCreate()方法中调用它。希望它有帮助!

 类似资料:
  • 问题内容: 我正在SSH shell会话上运行命令,为了获得该命令,我在官方示例后面使用了JSch 。 我也在 StackOverflow* 上也遵循此示例编写了自己的代码 * 这是 我的代码: 看起来不错,但奇怪的是 它只能在调试模式下工作 。如果我运行它,程序将无法执行。我认为它锁定 了while循环, 但是我不明白为什么。没有while循环,代码将到达终点,但是不执行任何shell命令。 我

  • 我使用Netbeans作为IDE 你能帮我找出问题吗?!

  • 问题内容: 嗨,我正在开发一个需要我运行一些bash代码的应用程序,有没有一种方法可以将脚本硬编码到我的应用程序中然后运行它?例如(这是一个非常简化的示例) 我有以下方法来运行一行bash命令,但需要在多行中运行类似的内容。同样,上面的代码是一个非常简化的示例,我实际上在执行的操作必须通过脚本运行,而不能通过Java完成。我也想对它进行硬编码,因为我知道可以将脚本存储在手机上并使用以下命令运行它,

  • Infact挂起。如果我删除多级ssh,一切都很好!我做错什么了吗?? 我从以下方面得到了一些提示:Java中的多级SSH登录和使用JSch的多个命令,但我无法运行代码。

  • 我试图在unix中使用JSCHSSH类(com.jcraft.jsch)执行一些工具。我的工具有一个选择菜单。我需要转到工具所在的文件夹,执行它并选择请求的选项。在每个命令之后,(cd,execute,…)我希望检查输出并检查状态代码(0/1)。我有下面的代码按预期执行它,但在这段代码中,我找不到一种方法来检查每个命令后的输出。 我无法找到一种方法,但我怎么能分开的命令,并打印他们一个接一个(在同

  • 我可以运行常规命令,如rm /home/user/Desktop/file但当我不能运行root命令。 我的目的是配置一个squid服务,运行如下命令:apt get install squid service squid start service 但是这些命令需要超级用户身份验证。 有人知道怎么修吗?谢啦