在Juniper OS上通过SSH发出多个脚本命令

时间:2015-05-28 12:50:53

标签: ruby ssh command carriage-return

我的问题是关于网络设备,尤其是Juniper OS。 我想在交换机上通过SSH执行很多命令。 而不是手动,使用脚本。 但是,当我通过SSH推送命令(例如:'configure')来操作软件配置时,它确实改变了提示。 并且仅在此级别的配置中可用的下一个命令不起作用,因为自上次命令以来肯定没有注册级别,因此新命令=返回到初始提示。

带有net / ssh的Ruby示例:

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上,没有'&'要么 ';'添加mutlipe命令。

是否可以在此类命令中插入回车符,然后将所有命令放在一个请求中?

否则,如何执行多个命令,保持它们之间的链接?

提前致谢。

2 个答案:

答案 0 :(得分:1)

好的,我找到的唯一解决方案是将指令连接成一个连接。

示例:

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;')

希望这会对某人有所帮助,不要犹豫改进它!

答案 1 :(得分:1)

我知道它关于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();
    }