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; } |
|