secureCRT自動登入指令碼(python)
阿新 • • 發佈:2019-01-28
由於每次登入都要輸入使用者名稱和密碼,還有個別裝置不能用SSH2,而我又不記得是哪幾臺??!!
寫個指令碼,做個按鈕,在Button Bar,New Button,在Action -> Function選Run Script,在Run Script選好指令碼路徑,自己命名個Label。
給2個版本的示例程式碼,都是可以直接執行的,一個簡單點,但擴充套件性不好;一個複雜點,但具有很強的擴充套件性。
版本1:
單個檔案,使用者名稱和密碼儲存在全域性變數中。
# $language = "python" # $interface = "1.0" #-------------------------------------------------------------------------------------- import os #-------------------------------------------------------------------------------------- szSSH2UserName = '"asdaf adsf"' szSSH2Passwd = "adsfqweradsf" szTelnetUserName = "asdaf adsf" szTelnetPasswd = szSSH2Passwd def connectFun(): szHost = crt.Dialog.Prompt("Enter host IP address : ", "Host IP", "", False) ssh2cmd = "/SSH2 /L %s /PASSWORD %s %s" % (szSSH2UserName, szSSH2Passwd, szHost) telnetcmd = "/Telnet %s" % (szHost) oTab = 0 crt.Screen.Synchronous = True try: crt.Session.ConnectInTab(ssh2cmd) oTab = crt.GetActiveTab() except: try: crt.Session.ConnectInTab(telnetcmd) oTab = crt.GetActiveTab() oTab.Screen.WaitForString("name") oTab.Screen.Send(szTelnetUserName + "\r") oTab.Screen.WaitForString("assword") oTab.Screen.Send(szTelnetPasswd + "\r") except: crt.Dialog.MessageBox(szHost + " Login Failed!","Failed") return oTab connectFun()
版本2:
分三個檔案,分別是autoConnect.py、connectEnv.py和UserNameAndPassword.txt。(放在同一目錄下,且只要在crt中執行autoConnect.py就行了)
- autoConnect.py登入邏輯程式碼,包括使用者名稱和密碼讀取。
- connectEnv.py打包了crt所有的API。可參考我重新打包的crt環境類
- UserNameAndPassword.txt儲存使用者名稱和密碼,第一行是使用者名稱,第二行是密碼。
autoConnect.py
# $language = "python" # $interface = "1.0" #-------------------------------------------------------------------------------------- import os import sys def getScriptPath(): return os.path.split(os.path.realpath(__file__))[0] sys.path.append(getScriptPath()) import connectEnv connectEnv.init(crt) #-------------------------------------------------------------------------------------- class Device(): def __init__(self): self.szDeviceIP = '' self.szUserName = '' self.szPasswd = '' self.env = connectEnv.CrtEnv() def initInformation(self): self.szDeviceIP = self.env.inputBox("Enter host IP address : ", "Auto login") self.__readUsernameAndPassword() def login(self): isLogin = self.env.login(self.getIP(), self.getUserName(), self.getPasswd()) if not isLogin: self.env.messageBox(self.getIP() + " Login Failed!", "Failed") return isLogin def getIP(self): return self.szDeviceIP def getUserName(self): return self.szUserName def getPasswd(self): return self.szPasswd def __readUsernameAndPassword(self): with open(getScriptPath() + "\\" + "UserNameAndPassword.txt", "r") as f: self.szUserName = f.readline().strip('\n') self.szPasswd = f.readline().strip('\n') def main(): device = Device() device.initInformation() device.login() main()
connectEnv.py
global crt def init(crtAPI): global crt crt = crtAPI class CrtEnv(): @staticmethod def promptBox(szMessage, szTitle): return crt.Dialog.Prompt(szMessage, szTitle, "", True) @staticmethod def inputBox(szMessage, szTitle): return crt.Dialog.Prompt(szMessage, szTitle, "", False) @staticmethod def messageBox(szMessage, szTitle): crt.Dialog.MessageBox(szMessage, szTitle) def __init__(self): self.__oTab = None self.__szPrompt = "" self.__szHostname = "" def login(self, szHostname, szUsername, szPassword): self.__szHostname = szHostname if self.__ssh(szUsername,szPassword): return True if self.__telnet(szUsername,szPassword): return True return False def logout(self): self.__oTab.Session.Disconnect() def send(self, szCMD): self.__checkEnv() self.__send(szCMD) self.__oTab.Screen.WaitForString(szCMD) return str(self.__getResult()) def changePrompt(self, szCMD): self.__send(szCMD) self.__oTab.Screen.WaitForString(szCMD) self.__oTab.Screen.WaitForString("Some String will not echo.", 1) self.__updatePrompt() def getTabName(self): if self.__isTabEmpty(): self.__getCurrentTab() return str(self.__oTab.Caption) def getTab(self): if self.__isTabEmpty(): self.__getCurrentTab() return self.__oTab def getPrompt(self): return self.__szPrompt def setLog(self, szFileName): self.__oTab.Session.LogFileName = szFileName def log(self, isLog, isAppend = False): self.__oTab.Session.Log(isLog, isAppend) def __ssh(self, szUsername, szPassword): szConnectString = "/SSH2 /L \"%s\" /PASSWORD \"%s\" %s" % \ (szUsername, szPassword, self.__szHostname) if self.__connect(szConnectString) == False: return False self.__oTab.Screen.Synchronous = True self.__waitDeviceTabInit() return True def __telnet(self, szUsername, szPassword): szConnectString = "/Telnet %s" % (self.__szHostname) if self.__connect(szConnectString) == False: return False self.__oTab.Screen.Synchronous = True self.__oTab.Screen.WaitForString("ame") crt.Sleep(200) self.__send(szUsername) self.__oTab.Screen.WaitForString("assword") crt.Sleep(200) self.__send(szPassword) self.__waitDeviceTabInit() return True def __connect(self, szConnectString): try: self.__oTab = crt.Session.ConnectInTab(szConnectString) return True except: return False def __waitDeviceTabInit(self, szString = "#"): crt.Sleep(300) self.__oTab.Screen.WaitForString(szString) def __send(self, szCMD): szCMD = szCMD + '\r' self.__oTab.Screen.Send(szCMD) def __checkEnv(self): if self.__isTabEmpty(): self.__getCurrentTab() self.__oTab.Screen.Synchronous = True if self.__isPromptEmpty(): self.__updatePrompt() def __isPromptEmpty(self): if self.__szPrompt == "": return True return False def __isTabEmpty(self): if self.__oTab == None: return True return False def __getCurrentTab(self): self.__oTab = crt.GetActiveTab() def __getResult(self): return self.__oTab.Screen.ReadString(self.__szPrompt) def __updatePrompt(self): crt.Sleep(300) rowIndex = self.__oTab.Screen.CurrentRow colIndex = self.__oTab.Screen.CurrentColumn - 1 self.__szPrompt = self.__oTab.Screen.Get(rowIndex, 0, rowIndex, colIndex) self.__szPrompt = str(self.__szPrompt.strip())
UserNameAndPassword.txt
asdaf adsf
adsfqweradsf