Консоль JSCH показала одинаковый вывод для разных команд - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь отправить некоторые команды маршрутизатору и пытаюсь прочитать вывод консоли. Но проблема в том, что каждый раз, когда я посылаю новую команду, я получаю один и тот же вывод. Я пытался создать новый сеанс после выполнения каждой команды, но я все еще получаю тот же результат. Я получил образец онлайн и изменил его в соответствии со своими потребностями. Когда я запускаю его как отдельный класс, он работает отлично. Но при развертывании на сервере он просто не работает правильно. Если честно, я всего лишь один-два дня, когда я использовал JSCH, и документация очень скудная.

Вот как мой код читает:

private void writeCommand(String command) throws IOException, JSchException {

        Channel channel = getChannel();

        ((ChannelExec) channel).setCommand(command.getBytes());
        channel.setInputStream(null);
        ((ChannelExec) channel).setErrStream(System.err);

        readChannelOutput(channel);    
    }

private void readChannelOutput(Channel channel) {

        byte[] buffer = new byte[1024];

        try {

            InputStream inputStream = channel.getInputStream();

            channel.connect();

            while (true) {

                while (inputStream.available() > 0) {

                    int i = inputStream.read(buffer, 0, 1024);

                    if (i < 0) {
                        break;
                    }

                    deviceOut.updateDeviceOutput(new String(buffer, 0, i));
                }

                if (channel.isClosed()) {
                    break;
                }
            }

            disconnect();

        } catch(IOException e) {
            e.printstacktrace();
        } catch (JSchException e) {
            e.printstacktrace();
        }
    }


public Session getSession () throws Exception {

        if (session == null || !session.isConnected()) {
            session = connect(getUserid(), getIpaddress(), getPassword(), getPort());
        }

        return session;
    }


protected Session connect(String userName, String hostname, String password, int port) throws Exception {

        JSch jSch = new JSch();

        try {


            session = jSch.getSession(userName, hostname, port);
            Properties config = new Properties(); 
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.setPassword(password);

            logger.debug("Connecting SSH to " + getIpaddress() + " - Please wait for few seconds... ");
            session.connect();
            logger.debug("Connected!");


            if (session.isConnected()) {
                setConnectionState(DeviceConnection.LOGIN_COMPLETE);
            } else {
                setConnectionState(DeviceConnection.LOGIN_FAILED);
                throw new Exception("Failed to login to device");
            }

            deviceOut = new DeviceOutput(getLogger());

            return session;

        } catch (JSchException e) {
            disconnect();
            e.printstacktrace();
        } catch (PalException e) {
            disconnect();
            e.printstacktrace();
        }

    }

Команды, которые я пытаюсь отправить,

term len 512

и

show running-config | include hostname

Но результат остается неизменным. Первая команда не должна иметь выходных данных, если честно. Что-то я делаю не так?

...