我目前正在尝试编写一个安卓简单的Android应用程序" ls"命令ssh到远程机器。我尝试过使用JSch和this page,但它似乎并没有起作用。我环顾四周,看来我必须实现一些异步任务才能运行代码。以下是主要活动的完整代码:
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");
}
}
这是我对任何严肃编码的第一次尝试,如果有人能提供帮助,我将不胜感激。谢谢!
答案 0 :(得分:0)
如果您只想测试。尽量不要使用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();
在主要活动的onCreate()方法中调用它。 希望它有所帮助!