java SSHClient class 有问题,特别是 Expect 方法没有 return 数据,这是怎么回事?

I have a problem with the java SSHClient class, specifically the Expect method does not return data as espected, what could be happening?

我使用java的SSHClientclass连接到Juniper路由器,在putty控制台进入控制台时returns结果没问题,但是做的时候它来自 Java 代码 它不保存命令返回的内容,或者不打印它,你能告诉我该怎么做吗?

我分享了我正在使用的 ssh class,以防您遇到任何问题:

package com.mycompany;

import static net.sf.expectit.matcher.Matchers.contains;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.connection.channel.direct.Session;
import net.schmizz.sshj.connection.channel.direct.Session.Shell;
import net.schmizz.sshj.transport.verification.PromiscuousVerifier;
import net.sf.expectit.Expect;
import net.sf.expectit.ExpectBuilder;

public class sshj {

    /**
     * Launch Commands to Provisioning
     * 
     * @param host
     * @param port
     * @param user
     * @param password
     * @param commands
     * @param splitBy
     * @return result
     */
    public static String launchCommands(String host, Integer port, String user, String password, String commands,
            String commandsSplitBy, String expectSplitBy, Integer timeoutInSeconds) {
        String result = "";
        StringBuilder wholeBuffer = new StringBuilder();
        SSHClient mSSSHClient = new SSHClient();
        mSSSHClient.addHostKeyVerifier(new PromiscuousVerifier());

        Session mSession = null;
        Shell mShell = null;
        Expect mExpect = null;

        String[] splitCommands = commands.split(commandsSplitBy);

        try {
            mSSSHClient.connect(host, port);
            mSSSHClient.authPassword(user, password);

            mSession = mSSSHClient.startSession();
            mShell = mSession.startShell();

            mExpect = new ExpectBuilder()
                    .withOutput(mShell.getOutputStream())
                    .withInputs(mShell.getInputStream())
                    .withEchoInput(wholeBuffer)
                    .withEchoOutput(wholeBuffer)
                    // .withEchoInput(System.out)
                    // .withEchoOutput(System.err)
                    .withExceptionOnFailure()
                    .withTimeout(timeoutInSeconds, TimeUnit.SECONDS).build();

            // When expectSplitBy is equals to ""
            if ("".equalsIgnoreCase(expectSplitBy)) {
                for (String commandExpect : splitCommands) {

                    mExpect.sendLine(commandExpect);

                }

            } else { // When expectSplitBy is not equals to ""

                for (String commandExpect : splitCommands) {
                    String[] commandExpectSplit = commandExpect.split(expectSplitBy);
                    mExpect.sendLine(commandExpectSplit[0]);
                    mExpect.expect(contains(commandExpectSplit[1]));
                }

            }

            mShell.close();
            mSession.close();
            mSSSHClient.disconnect();

            result = wholeBuffer.toString();
        } catch (IOException e) {
            result = wholeBuffer.toString().concat(" The Exception is> ").concat(e.toString());
            e.printStackTrace();

            try {
                mExpect.sendLine("exit");
                mShell.close();
                mSession.close();
                mSSSHClient.disconnect();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }

        return result;
    }

}

我发现了问题,发送的命令开头包含一些奇怪的字符,看起来像空白 space,我可以消除它们并执行 class 的功能没问题。

我标记了 mule,因为它是我使用此 class 的地方,我知道它来自第三方,这就是为什么我共享所有代码以便您可以进行测试。如果您觉得我的问题不清楚,非常抱歉。