SSH输出始终为空

时间:2013-02-13 21:16:49

标签: java android ssh outputstream jsch

我一直试图解决这个问题几个小时了,我似乎无法弄明白。我正在尝试使用JSch从Android手机SSH到Linux计算机。命令始终正常,但通道的输出通常为空。有时它会显示输出,但大部分时间都没有。这是我在网上找到的代码。

       String userName = "user";
       String password = "test123";
       String connectionIP = "192.168.1.13";

       JSch jsch = new JSch();
       Session session;
       session = jsch.getSession(userName, connectionIP, 22);
       session.setPassword(password);

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

       // SSH Channel

       ChannelExec channelssh = (ChannelExec) session.openChannel("exec");      
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       channelssh.setOutputStream(baos);

       // Execute command
       channelssh.setCommand("ls");
       channelssh.connect();        
       channelssh.disconnect();

       RESULT = baos.toString();

结果通常是空的。如果我将命令更改为mkdir或类似的东西,则会在Linux计算机上显示文件,这使我相信命令部分正常工作。问题似乎在于ByteArrayOutputStream。我还通过终端在另一台计算机上测试了connectionip,用户名和密码,所以我知道凭据是正确的。我已经用Google搜索了这个问题,任何输入都会对我有所帮助!

2 个答案:

答案 0 :(得分:3)

找到答案我正在阅读错误的信息流。对于有这个问题的其他人来说,这是正确的代码。

       InputStream inputStream = channelssh.getInputStream(); 

       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

       StringBuilder stringBuilder = new StringBuilder();

       String line;

       while ((line = bufferedReader.readLine()) != null) 
       {

           stringBuilder.append(line);
           stringBuilder.append('\n');

       }

       return stringBuilder.toString();   

答案 1 :(得分:0)

exec-channel将在另一个线程上运行,因此您需要在调用Channel#disconnect()之前等待其终止。