分享

SecureCRT配置调用JS脚本

 咖啡猫来啦 2015-02-04

1.在状态栏了调出button bar

 
 
 









vi JumpProbe_ssh.js
# $language = "JScript"
# $interface = "1.0"

// Connect using a pre-defined session.

function main() {
    var crt_promp,devicename,prompt_back;
    
    var resid = crt.Dialog.Prompt("请输入设备ID: ", "DeviceID", "", 0);
    if(resid == "" || undefined == resid) {
        crt.Dialog.MessageBox("请输入正确设备ID!");
        return ;
    }
    
    //读取设备所在采集机并跳转
    JumpProber(resid);
    
    //读取
    var res_info = new Object;
    var ret = GetResInfo(resid, res_info);
    if(ret < 0) {
        crt.Dialog.MessageBox("获取资源信息失败,无法登陆资源!");
        return;
    }
}

function JumpProber(resid){
    var crt_promp = GetPrompt();
    var grep_cmd = "grep "+resid+" /slview/nms/cfgall/devgrp.PRS*";
    crt.Screen.send(grep_cmd);
    crt.Screen.sendkeys("{ENTER}");
    
    var result;
    if(result = crt.Screen.ReadString(crt_promp,30)) {
        result = result.replace(/grep.*[\n|\r]+/,"");
        result = result.replace(/^\s*/,"");
        var array = result.split(" ");
        
        if(array.length <= 2 || undefined == array[1] || "" == array[1] || !array[1].match(/PRS\w+/)){
            return;
        }
        
        var grep_cmd = "grep "+array[1]+" /slview/nms/cfg/probe.ini";
        crt.Screen.send(grep_cmd);
        crt.Screen.sendkeys("{ENTER}");
        
        if(result = crt.Screen.ReadString(crt_promp,30)) {
            result = result.replace(/grep.*[\n|\r]+/,"");
            result = result.replace(/^\s*/,"");
            array = result.split(" ");
            
            if(array.length >= 2 && undefined != array[1] && array[1] != "" && array[1].match(/^\d+\.\d+\.\d+\.\d+/) && array[1] != "127.0.0.1") {
                var ssh_cmd = "ssh "+array[1];
                crt.Screen.send(ssh_cmd);
                crt.Screen.sendkeys("{ENTER}");
                
                RETRY:
                for (var i=1;i<=3;i++) {
                    while(result = crt.Screen.WaitForStrings("(yes/no)?","assword:",">","#","$",5)) {
                        if(result == 1) {
                            crt.Screen.send("yes");
                            crt.Screen.sendkeys("{ENTER}");
                            continue;
                        }
                        else if(result == 2) {
                            var passwd_host = crt.Dialog.Prompt("请采集机"+array[1]+"密码: ", "", "", 0);
                            
                            if(passwd_host == undefined) {
                                crt.Screen.send("slview");
                            }
                            else{
                                crt.Screen.send(passwd_host);
                            }
                            crt.Screen.sendkeys("{ENTER}");
                            continue;
                        }
                        else if(result > 2){
                            break;
                        }
                        else{
                            continue RETRY;
                        }
                    }
                }//重试3次
            }
            
        }
    }
    return 0;
}

function GetResInfo(resid, res_info){
    var crt_promp = GetPrompt();
    var grep_cmd = "grep "+resid+" /slview/nms/cfg/devcol* /slview/nms/cfgall/devcol*";
    crt.Screen.send(grep_cmd);
    crt.Screen.sendkeys("{ENTER}");
    
    var result;
    if(result = crt.Screen.ReadString(crt_promp,30)) {
        //crt.Dialog.MessageBox(result);
        var array = result.split(";;");
        
        res_info["LoopAddress"] = array[1];
        res_info["Username"] = array[4];
        res_info["Password"] = array[5];
        
        //密码加密?
        if(res_info["Password"].match(/^\w{9,}/)) {
            var cmd = "/slview/nms/bin/DESConvertTest.pl "+res_info["Password"];
            crt.Screen.send(cmd);
            crt.Screen.sendkeys("{ENTER}");
            result = crt.Screen.ReadString(crt_promp,5);
            result = result.replace(/^.*[\n|\r]*/,"");
            result = result.replace(/^\s*/,"");
            
            var array = result.split(/\s/);
            res_info["Password"] = array[0];
        }
    }
    if(undefined == res_info["LoopAddress"]) {
        return -1;
    }
    
    return 0;
}

function LogoutDev(crt_promp,prompt_back, devicename){
    var quit_cmds = ["quit","exit","logout"];
    
    if(devicename != "") {
        prompt_back = prompt_back + devicename;
    }
    
    var cmd_index = 0;
    crt.Screen.send(quit_cmds[0]);
    crt.Screen.sendkeys("{ENTER}");
    while( (++cmd_index < quit_cmds.length)) {
        var ret = crt.Screen.WaitForStrings(crt_promp,prompt_back,5);
        if(ret == 2) {
            crt.Screen.send(quit_cmds[cmd_index]);
            crt.Screen.sendkeys("{ENTER}");
        }
        else{
            return;
        }
    }
}


function LoginDev(res_info){
    var host = res_info["LoopAddress"];
    var user = res_info["Username"];
    var passwd = res_info["Password"];
    
    //获取终端等待提示符
    var crt_promp = GetPrompt();
    var cmd = "telnet "+host;
    crt.Screen.Send(cmd);
    crt.Screen.sendkeys("{ENTER}");
    
    var getname_prompt = "";
    
    RETRY:
    for (var i=1;i<=3;i++) {
        var result = 0;
        while(result = crt.Screen.WaitForStrings("sername:","ogin:","assword:",">","#","$",5)) {
            //crt.Dialog.MessageBox(result);
            //发现有错误则重新等待特殊提示符
            var result_err = crt.Screen.WaitForStrings("Tacacs server reject","Error:",1);
            if(result_err >= 1) {
                continue;
            }
            
            //crt.Dialog.MessageBox("sleep....");
            if(result == 1 || result == 2) {
                //crt.Dialog.MessageBox("wait 'sername:',now send '"+user+"'");
                crt.Screen.Send(user);
                crt.Screen.sendkeys("{ENTER}");
                continue;
            }
            else if(result == 3) {
                //crt.Dialog.MessageBox("wait 'assword:',now send '"+passwd+"'");
                crt.Screen.Send(passwd);
                crt.Screen.sendkeys("{ENTER}");
                continue;
            }
            else if(result == 4) {
                getname_prompt = ">";
                break RETRY;
            }
            else if(result == 5) {
                getname_prompt = "#";
                break RETRY;
            }
            else if(result == 6) {
                getname_prompt = "$";
                break RETRY;
            }
            else{
                continue RETRY;
            }
        }
    }
    
    devicename = GetDevName(getname_prompt);
    return [crt_promp,devicename,getname_prompt];
}

function GetPrompt(){
    var getname_prompt = "";
    crt.Screen.sendkeys("{ENTER}");
    if(result = crt.Screen.WaitForStrings(">","#","\n$","$",5)) {
        if(result == 1) {
            getname_prompt = ">";
        }
        else if(result == 2) {
            getname_prompt = "#";
        }
        else if(result == 3) {
            getname_prompt = "\n$";
        }
        else if(result == 4) {
            getname_prompt = "$";
        }
        else{
            crt.Dialog.MessageBox("为自动获取到提示符,使用默认:'>'");
            getname_prompt = ">";
        }
    }
    
    return getname_prompt;
}

function GetDevName(getname_prompt){
    //登陆成功 获取设备名称
    var devicename ;
    if(getname_prompt == "" || undefined == getname_prompt) {
        getname_prompt = GetPrompt();
    }
    
    var prompt_front = ["<","@","\n"];
    crt.Screen.sendkeys("{ENTER}");
    if(crt.Screen.ReadString("<","@","\n", 5) && (devicename = crt.Screen.ReadString(getname_prompt, 5)) ) {
        if(ret = devicename.match(/\n/)) {
            var array_tmp = devicename.split(/<|@|\n|\s/);
            devicename = array_tmp[array_tmp.length - 1];
        }
        //crt.Dialog.MessageBox("devicename:"+devicename);
        //while(crt.Screen.ReadString(getname_prompt, 1)){}
    }
    else{
        //crt.Dialog.MessageBox("获取设备名称失败,文件名称使用临时文件:tmp.txt!");
        devicename = "";
    }
    
    return devicename;
}

function GetCmdRetbyCmd(cmd, prompt_back, prompt_more, timeout){
    var crt_version = crt.version;
    
    var result = "";
    crt.Screen.Send(cmd);
    crt.Screen.sendkeys("{ENTER}");
    while(result += crt.Screen.ReadString(prompt_back,prompt_more,timeout)) {
        if(result.indexOf(prompt_more) >= 0){
            crt.Screen.Send(" ");
        }
        else{
            result += prompt_back;
            //crt.Dialog.MessageBox(result);
            break;
        }
    }
    
    return result;
}
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多