利用PuTTY連線設備後執行指令並輸出Log,快速建立半自動化

官方文件

PuTTY是個非常入門的終端機軟體,幾乎所有網管人員都會使用。其實有許多更好用的終端機軟體,但通常只能在個人的電腦上使用,終究很難做到通用

因此,本文以PuTTY為主,因為資安越來越重視,導致能使用到的越來越侷限,非個人電腦可能沒有權限安裝別的像是程式語言環境,導致效率非常低下。因為要連線到設備,至少會給PuTTY使用。

腳本可以半小時內全數搞定的,若沒有,人為一台台處理,搞不好一整天都弄不完。

從0開始快速建立,這將在未來會更常使用到。

PuTTY可從CMD下指令運作,參數可以看官方文件,這邊就不多提。

假設今天有三台設備,都是同樣型號的設備,只使用一個指令「show run」,Log用「&H」加上CLI指令為名稱,&H代表Hostname,兩者組合,這樣才能知道這Log是什麼設備上什麼指令的結果。

名稱密碼連線方式ScriptPathsessionlog
admin@192.168.1.1passwordsshshow run.txt&H-show run.log
admin@192.168.1.2passwordsshshow run.txt&H-show run.log
admin@192.168.1.3passwordsshshow run.txt&H-show run.log

由於PuTTY的Script是得從檔案中讀取,只能一行指令(請勿有換行),因此我們要在PuTTY同目錄下,建立一個show run.txt

show run.txt

show run

非常簡單,如果之後要用多個指令,就要建立多個檔案。

做好之後,把資訊轉換成PuTTY指令

putty admin@192.168.1.1 -pw password -ssh -m "show run.txt" -sessionlog "&H-show run.log"

在PuTTY所在的資料夾,在檔案路徑輸入欄中輸入「cmd」,就能開啟位置在該資料夾的CMD,然後將PuTTY指令貼上到CMD中執行。

接著在同資料夾中,找到admin@192.168.1.1-show run.log,內容為送出show run後,所有的輸出內容。

透過這樣的概念與架構,只要有設備清單與帳密,以及需要執行的指令。接下來就能用excel去完成快速填入。

現在把表格建立在Excel中,這次指令除了show run之外,要多個show inventory,表格改良之後如下。

名稱密碼連線方式ScriptPathsessionlogPuTTY
admin@192.168.1.1passwordsshshow run.txt&H-show run.logputty admin@192.168.1.1 -pw password -ssh -m “show run.txt” -sessionlog “&H-show run.log”
admin@192.168.1.1passwordsshshow show inventory.txt&H-show show inventory.logputty admin@192.168.1.1 -pw password -ssh -m “show inventory.txt” -sessionlog “&H-show inventory.log”
(略)

如果照著上方表格,sessionlog跟PuTTY可以套公式

sessionlog #E2

="&Y&m&D&T-&H-"&D2&".log"

PuTTY #F2

="putty  "&A2&" -pw "&B2&" -"&C2&" -m "&CHAR(34)&D2&".txt"&CHAR(34)&" -sessionlog "&CHAR(34)&E2&CHAR(34)

因為雙引號在Excel是特殊符號,需要使用CHAR(34)才能打出。

如果有整理好設備清單,再填入公式,得到指令,從CMD中,就能一輪一輪貼上,快速完成資料取得或修改。

PLINK

Plink是PuTTY的Command Line版本,也就是沒有圖形化介面,靠指令連線,更適用於自動化操作。

官方文件參考文章1參考文章2

網路上文章寫說這比PuTTY更適合使用自動化,能用批次檔,交互性比較好。

從PuTTY官網上下載plink.exe,在同目錄下執行CMD,一樣假設要在設備上下多個指令,改用plink的版本。

(
    echo no paging
    echo show run
    echo show inventory
    echo exit
) | plink admin@172.16.3.253 -pw Aruba123 -ssh > 172.16.3.253.log

好處是可以將多行指令的結果集中在一個LOG,比較簡約。

如果指令數一多,那麼PuTTY版本會有相當可觀的行數,而且Excel上也不好處理。指令組合是依照設備型號變化,PuTTY版本會讓設備一行變多成跟指令組合數一樣的行數,而Plink只需要一行。

因為Excel中儲存格的值有多行的話,這時複製再貼上到非excel程式中,前後會加上”,導致無法直接貼上到CMD使用。解決方法的話,就是前後再加換行符,即便是有雙引號那行,也不會干擾到指令執行。

名稱密碼連線sessionlogplink
admin@192.168.1.1passwordssh如下如下

sessionlog #D2

=TEXT(NOW(),"yyyymmddhhMM")&"-"&A2&".log"

plink # E2

="
(
    echo no paging
    echo show run
    echo show inventory
    echo exit
) | plink "&A2&" -pw "&B2&" -"&C2&" > "&D2