gpt4 book ai didi

java - 实现 JSch 在 Android 应用程序中运行 ssh 命令

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:41 25 4
gpt4 key购买 nike

我目前正在尝试编写一个 Android 应用程序,该应用程序通过 ssh 向远程计算机执行一个简单的“ls”命令。我尝试使用 JSch 和 this page ,但它似乎不起作用。我环顾四周,似乎我必须实现一些异步任务来运行代码。这是现在主要 Activity 的完整代码:

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");

}


}
  • 将 use-permission android:name="android.permission.INTERNET"添加到 AndroidManifest.xml

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

最佳答案

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

        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();

在主 Activity 的 onCreate() 方法中调用它。希望对您有帮助!

关于java - 实现 JSch 在 Android 应用程序中运行 ssh 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com