我目前正在尝试编写一个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");
}
}
这是我第一次尝试任何严肃的编码,如果有人能帮助它将不胜感激。谢谢!
如果您只是想测试。尽量不要使用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 但是这些命令需要超级用户身份验证。 有人知道怎么修吗?谢啦