Jsch:命令输出不可用

问题描述 投票:0回答:2

我正在尝试使用 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() 时,总是返回零,表明该命令没有输出。

蒂亚!

java inputstream jsch
2个回答
4
投票

请尝试下面的代码 - 已测试且工作正常

    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/用户
用户@主机:~>
用户@主机:~>退出
退出


-1
投票

谢谢 Vishnu,你的代码对我来说非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.