Несколько команд сценария через SSH в ОС Juniper

Мой вопрос касается сетевого оборудования, особенно Juniper OS. Я хотел бы выполнить много команд через SSH на коммутаторе. И не вручную, скриптом. Но когда я нажимаю команду через SSH (пример: «настроить») для управления конфигурацией программного обеспечения, это действительно меняет приглашение. И следующая команда, доступная только на этом уровне конфигурации, не работает, потому что повышение уровня наверняка не зарегистрировано с момента последней команды, поэтому новая команда = вернуться к исходной подсказке.

Пример на Ruby с net/ssh:

ssh = Net::SSH.start("X.X.X.X", LOGIN, :password => PASSWORD)
   ssh.exec!("configure")  # -> Entering configuration mode
   ssh.exec!("set system services telnet")  # -> error: unknown command: set
ssh.close

В Juniper ILC нет '&' или ';' добавить многократные команды.

Можно ли вставить возврат каретки в такую ​​​​команду, а затем поместить все команды в один запрос?

Иначе как я могу выполнить несколько команд, сохраняя связь между ними?

Заранее спасибо.


person Rasta 29    schedule 28.05.2015    source источник
comment
возможный дубликат Как я могу выполнить 2 или более команд в одном сеансе ssh?   -  person andreanne.wintheiser    schedule 28.05.2015
comment
Да, именно так, но это не тот способ добавления таких команд. '&&' или ';' существуют в Linux, но не в Juniper ILC...   -  person Rasta 29    schedule 28.05.2015


Ответы (2)


Хорошо, единственное решение, которое я нашел, это объединить инструкции в одно соединение.

Пример :

ssh.exec!('configure;
            set system services telnet;
            delete system services web-management;
            set system login class READ permissions view-configuration;
            set system login class READ allow-commands show;
            ...
            commit;')

Надеюсь, это поможет кому-то, не стесняйтесь улучшать его!

person Rasta 29    schedule 30.12.2015

Я знаю, что это о Ruby, но я надеюсь, что результаты моего исследования в Java могут быть полезны. Я использовал такую ​​конструкцию в eBay/parallec (думаю, в JSch это тоже сработает):

public static void sshVmWithPassword() {
        ParallelClient pc = new ParallelClient();
        pc.prepareSsh().setTargetHostsFromString(HOST)
                .setSshCommandLine("show version;\nshow log")
                .setSshUserName(USERNAME)
                .setSshPassword(PASSWORD)
                .execute(new ParallecResponseHandler() {
                    public void onCompleted(ResponseOnSingleTask res,
                                            Map<String, Object> responseContext) {
                        System.out.println("Responose:" + res.toString()
                                + " host: " + res.getHost()
                                + " errmsg: " + res.getErrorMessage());
                    }
                });
        pc.releaseExternalResources();
    }

person Vladislav Kysliy    schedule 01.06.2017