Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在JUniter OS上通过SSH执行多个脚本命令_Ruby_Ssh_Command_Carriage Return - Fatal编程技术网

Ruby 在JUniter OS上通过SSH执行多个脚本命令

Ruby 在JUniter OS上通过SSH执行多个脚本命令,ruby,ssh,command,carriage-return,Ruby,Ssh,Command,Carriage Return,我的问题是关于网络设备,特别是JuniperOS。 我想通过SSH在交换机上执行很多命令。 而不是手动,使用脚本。 但是,当我通过SSH(例如:“configure”)推送一个命令来操作软件配置时,它确实会更改提示符。 而下一个命令(仅在此级别的配置中可用)不起作用,因为自上一个命令以来,肯定没有注册升级,所以new command=返回初始提示符 Ruby和net/ssh中的示例: ssh = Net::SSH.start("X.X.X.X", LOGIN, :password => P

我的问题是关于网络设备,特别是JuniperOS。 我想通过SSH在交换机上执行很多命令。 而不是手动,使用脚本。 但是,当我通过SSH(例如:“configure”)推送一个命令来操作软件配置时,它确实会更改提示符。 而下一个命令(仅在此级别的配置中可用)不起作用,因为自上一个命令以来,肯定没有注册升级,所以new command=返回初始提示符

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上,没有“&”或“;”添加mutlipe命令

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

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


提前感谢。

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

例如:

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

希望这将帮助别人,不要犹豫,改善它

我知道这是关于Ruby的,但我希望我在Java中的调查结果会有用。我在中使用了这样的构造(我认为在JSch中也可以):

public静态无效sshVmWithPassword(){
ParallelClient pc=新的ParallelClient();
pc.prepareSsh().setTargetHostsFromString(主机)
.SetShsCommandLine(“显示版本;\n显示日志”)
.SetShuserName(用户名)
.SetshPassword(密码)
.execute(新的ParallecResponseHandler(){
未完成公共无效(响应单个任务res,
映射响应(文本){
System.out.println(“Responose:+res.toString()
+“主机:”+res.getHost()
+“errmsg:”+res.getErrorMessage());
}
});
pc.释放外部资源();
}


是的,完全可能重复,但添加这样的命令的方式不同。&&或者“;”存在于Linux上,但不存在于JUniter ILC上。。。
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();
    }