1. 程式人生 > >通過 python 開啟 SecureCRT 軟體並實現自動連線主機

通過 python 開啟 SecureCRT 軟體並實現自動連線主機

如何通過 python 開啟 SecureCRT 軟體並實現自動連線主機?這個問題是我在實際應用中遇到的問題。做運維的工作上經常需要通過 SecureCRT 連線某個系統內的所有主機,話說 boss 們嫌這樣太麻煩,希望通過編寫一個程式軟體,在該軟體上通過下拉框選擇特定的系統,再點選按鈕就可實現連線該特定系統的所有主機。這是很好的想法,畢竟還是要方便嘛! 通過 python 裡的 os.system() 可以開啟外部程式,當然也可以開啟 SecureCRT 啦,通過os.system('...\\SecureCRT.exe') 即可(其中 ... 代表 SecureCRT 的安裝路徑),但是這僅僅是打開了 SecureCRT 軟體而已,並不能實現自動連線主機啊。實際上通過執行 bat 檔案呼叫 vbs 指令碼可以實現自動開啟 SecureCRT 並連線特定的主機。

我們寫的 login.bat 檔案的程式碼如下:

@set /p name=使用者名稱:
@set /p pwd=密碼:
 
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /SCRIPT "D:\test\login.vbs" /arg %name% /arg %pwd%
:end
exit
login.vbs 指令碼的程式碼如下:
#$language = "VBScript"
#$interface = "1.0"
 
Dim UsrID  '使用者名稱
Dim UsrPass    '密碼
 
Public Sub login
  UsrID=crt.Arguments.Getarg(0)
  UsrPass=crt.Arguments.Getarg(1)
End Sub
 
Sub main
  login
  WXB
End Sub
 
Sub WXB
crt.Screen.Synchronous = True
crt.session.connectintab("/SSH2 /L " & UsrID & " /PASSWORD " & UsrPass & " /C 3DES /M MD5 192.168.206.128")
crt.session.connectintab("/SSH2 /L " & UsrID & " /PASSWORD " & UsrPass & " /C 3DES /M MD5 192.168.206.129")
End Sub
login.bat 程式碼中的前兩行表示設定兩個變數 name 和 pwd,"/p" 表示通過彈出 cmd 視窗輸入變數值。start 那一行表示通過 SecureCRT 呼叫 login.vbs 指令碼並把 name 和 pwd 這兩個變數的值作為引數傳進去。 login.vbs 程式碼中通過 Dim 聲明瞭 UsrID 和 UsrPass 這兩個變數,crt.Arguments.Getarg(0) 和 crt.Arguments.Getarg(1) 表示獲得 login.bat 傳進來的兩個引數,也就是 %name% 和 %pwd%。crt.session.connectintab("/SSH2 /L " & UsrID & " /PASSWORD " & UsrPass & " /C 3DES /M MD5 192.168.206.128") 這行程式碼表示以開啟一個新標籤頁的形式連線主機,我這裡測試的是連線兩太主機,ip 分別為 192.168.206.128 和 192.168.206.129。這兩臺主機登入的使用者名稱和密碼都是一樣的,都是通過 login.bat 傳進來的。 現在我們再在 python 中通過 os.system('D:\\test\\login.bat') 來呼叫 login.bat 實現自動連線主機。

如上圖所示,執行 python 程式碼後會呼叫 bat 檔案從而彈出 cmd 視窗,輸入正確的使用者名稱和密碼即可實現開啟 SecureCRT 軟體並自動連線主機。 這時又出現了一個問題,Boss 又說每次連線主機時都要彈出 cmd 視窗並輸入使用者名稱和密碼,太麻煩了,希望能夠 python 執行時隱藏 cmd 視窗直接連線主機。這個考慮也是適當的,本來這樣做就是為了方便嘛。 既然執行 bat 檔案時不能彈出 cmd 視窗以輸入使用者名稱和密碼,那就要把使用者名稱和密碼在 python 執行的時候通過引數的形式傳到 bat 檔案中。此時要將 login.bat 程式碼修改入下:
@set name=%1
@set pwd=%2
 
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /SCRIPT "D:\test\login.vbs" /arg %name% /arg %pwd%
:end
exit
程式碼中的 %1 和 %2 分別表示返回 bat 的第一個引數和第二個引數,用來接收 python 執行的程式碼中寫入的使用者名稱和密碼這兩個引數。使用者名稱和密碼這兩個引數實際中是要通過提前輸入驗證的,這裡我們直接寫到 python 程式碼中測試:

此時便可以隱藏 cmd 視窗,不用每次在 cmd 視窗中輸入使用者名稱和密碼了。 這是我覺得已經大功告成了,便拿到生產上去測試,誰知道又出了一點小問題。有些人設定的密碼中含有等於號“=”,將帶有“=”的引數值傳給 bat 檔案執行時,bat 會把“=”當成賦值從而導致“=”之後的字元不能傳進去,也就是說只能讀取到“=”之前的字元,所以密碼傳到 bat 裡就是錯誤的了。 這時又要給密碼這個字串動點手腳了。在 python 程式碼中傳入密碼這個引數時前後加上雙引號,也就是os.system('D:\\test\\login.bat %s "%s"' %('melisky','123456'))。此時密碼這個引數傳到 bat 中是帶雙引號的,所以在 bat 中要把雙引號再去掉,具體的 bat 檔案的程式碼實現如下:
@set name=%1
@set pwd=%2
set pwd1=%pwd:~1,-1%
 
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /SCRIPT "D:\test\login.vbs" /arg %name% /arg %pwd%
:end
exit
第3行程式碼實現就是去掉傳進去的密碼中雙引號。 此時再執行就可以實現帶有“=”的密碼的輸入了:
以上就是我通過 python 呼叫 bat 執行 vbs 指令碼實現的自動開啟 SecureCRT 並自動連線特定主機的方法了。希望大家有更好的方法的提出來共同學習,也希望我的方法對大家也能有一點幫助。