2014-09-10 112 views
0

我想用jsch连接到远程交换机并运行一些命令并提取输出。Jsch:命令输出不可用

我能够使用连接到交换机,但命令输出在输入流中不可用。也许我没有按照正确的方式去做。这里的代码

session = jsch.getSession("user", "10.0.0.0", 22); 
    session.setPassword("somepwd"); 
    session.setConfig("StrictHostKeyChecking", "no"); 
    session.connect(); 
    System.out.println("connected to remote host"); 
    Channel channel = session.openChannel("shell"); 

    OutputStream ops = channel.getOutputStream(); 
    PrintStream ps = new PrintStream(ops); 
     channel.connect(); 
      ps.println("show version"); 
      ps.flush(); 
      ps.close(); 
      InputStream in=channel.getInputStream(); 
      byte[] bt=new byte[1024]; 


      while(in.available()>0) 
      { 
       int i=in.read(bt, 0, 1024); 
       if(i<0) 
       break; 
        String str=new String(bt, 0, i); 
       //displays the output of the command executed. 
        System.out.print(str); 
      } 

    channel.disconnect(); 
    session.disconnect(); 

当我调试inputStream.isAvailable()总是返回零暗示没有输出命令。

TIA!

+0

http://www.jcraft.com/jsch/examples/Shell.java.html – 2014-09-10 10:17:44

+0

当您的代码达到'while(in.available()> 0)时会发生什么?它挂起来还是别的东西? – Kenster 2014-09-12 13:25:05

+0

它不挂..总是假的条件.. – ayush 2014-09-15 07:35:27

回答

3

请尝试下面的代码 - 测试和工作

Channel channel = session.openChannel("shell"); 
    OutputStream ops = channel.getOutputStream(); 
    PrintStream ps = new PrintStream(ops); 
    channel.connect(); 
    ps.println("pwd"); 
    ps.println("exit"); 
    ps.flush(); 
    ps.close(); 

    InputStream in = channel.getInputStream(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
    System.out.println("Opening..."); 

    String jarOutput; 
    while ((jarOutput = reader.readLine()) != null) 
     System.out.println(jarOutput); 
    reader.close(); 
    channel.disconnect(); 

输出 -

开幕...
用户@主持人:〜> PWD
/home/user中
用户@host:〜>
user @ host:〜> exit
注销

+0

好的一块代码毗湿奴。如果我想执行ps.println(“sudo -u myuser -i”); ps.println( “MYPASSWORD”);这是一个无限的等待/挂起。如何处理这个? – aiman 2017-12-21 13:48:20

+0

sudo -u myuser -i,我必须替换实际的用户权限? 一旦我尝试过,我会尽快回复您。 – 2017-12-28 06:12:26