Java 无法从命令获取响应(使用JSch)

Java 无法从命令获取响应(使用JSch),java,android,jsch,Java,Android,Jsch,我正在尝试从通过ssh发送的命令中获取响应。我使用jschlib进行连接。已建立连接,但未从发送的命令获得响应 public void openSSH( String username, String password, String hostname, int port) throws Exception { JSch jsch = new JSch(); Session session = jsch.

我正在尝试从通过ssh发送的命令中获取响应。我使用jschlib进行连接。已建立连接,但未从发送的命令获得响应

public void openSSH(
        String username,
        String password,
        String hostname,
        int port) throws Exception {     

    JSch jsch = new JSch();
    Session session = jsch.getSession(username, hostname, 22);
    this.session = session;
    session.setPassword(password);

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

}

public String runCommand(String command)  throws Exception {
    // SSH Channel
    ChannelExec channelssh = (ChannelExec) session.openChannel("exec");      
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    InputStream in = channelssh.getInputStream();
    channelssh.setOutputStream(baos);

    // Execute command
    channelssh.setCommand(command);
    channelssh.connect();        



     System.out.println("Unix system connected...");
        byte[] tmp = new byte[1024];
        while (true){

            while (in.available() > 0) {
                Log.v("running", "line");  // won't work
                int i = in.read(tmp, 0, 1024);
                if (i < 0) {

                    break;
                }
                String line = new String(tmp, 0, i);
                System.out.println("Unix system console output: " +line);
                        channelssh.disconnect();
            }
        }
}



private class AsyncTaskOne extends AsyncTask<Void, Void, Boolean> {


    @Override
    protected Boolean doInBackground(Void... params) {

        try {
            openSSH("login", "pass", "10.10.10.80", 22 );
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return true;
    }

    protected void onPostExecute(Boolean value) {

        if (value)  {
        try {
            runCommand("ls -llh");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        }
    }

}
public-void-openSSH(
字符串用户名,
字符串密码,
字符串主机名,
int端口)引发异常{
JSch JSch=新的JSch();
Session Session=jsch.getSession(用户名、主机名、22);
this.session=会话;
session.setPassword(密码);
//避免要求钥匙确认
Properties prop=新属性();
道具放置(“检查”、“否”);
session.setConfig(prop);
session.connect();
}
公共字符串runCommand(字符串命令)引发异常{
//SSH通道
ChannelExec channelssh=(ChannelExec)session.openChannel(“exec”);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
InputStream in=channelssh.getInputStream();
channelssh.setOutputStream(baos);
//执行命令
channelssh.setCommand(命令);
channelssh.connect();
System.out.println(“Unix系统已连接…”);
字节[]tmp=新字节[1024];
while(true){
while(in.available()>0){
Log.v(“running”、“line”);//不起作用
inti=in.read(tmp,0,1024);
if(i<0){
打破
}
字符串行=新字符串(tmp,0,i);
System.out.println(“Unix系统控制台输出:”+行);
channelssh.disconnect();
}
}
}
私有类AsyncTaskOne扩展了AsyncTask{
@凌驾
受保护的布尔doInBackground(Void…params){
试一试{
openSSH(“登录”、“通过”、“10.10.10.80”、22);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回true;
}
受保护的void onPostExecute(布尔值){
如果(值){
试一试{
runCommand(“ls-llh”);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}

请检查您的输入流是否可用。据我所知,问题是您的输入流不可用;I don’我不会给你任何东西

 InputStream in = channelssh.getInputStream();
// channelssh.setOutputStream(baos); 
评论这一行,看看这里是否真的有什么东西。 另外,您如何确定您已连接? 设置命令的正确方法如下,请执行以下操作:

 Channel channel=session.openChannel("exec");
  ((ChannelExec)channel).setCommand(command);