golang expect包的使用介紹
最近和業務的相關人員對接某一需求時,其提出希望能在業務伺服器上不給業務人員密碼信息,而能通過執行某個命令後由usera變成userb。這個需求其實用expect 就可以實現,不過使用tcl 語言編寫的腳本里密碼還是以明文出現的,業務是想通過安裝pexpect (python)包,通過生成pyc的文件,略微增加下安全性。不過想了下,可以通過使用golang下的expect實現同樣的效果,而且安全性更強。
經搜索引擎檢索,發現 https://github.com/ThomasRooney/gexpect/ 可以實現該效果,而且在該包的examples里提供了ftp、ping、python、screen相關的使用示例。這裡如果使用su切換用戶,代碼比較簡單,如下:
//code from www.361way.com package main import gexpect "github.com/ThomasRooney/gexpect" func main() { child, err := gexpect.Spawn("su - zabbix") if err != nil { panic(err) } child.Expect("Password") child.SendLine("123456") child.Interact() child.Close() }
不過這個包在使用後,可以正常切換用戶,不過缺點也比較多:
無法tab補全
無法正常按pty Terminal size大小輸出(只能輸出一部分,有點類似於虛擬化virsh console連接後的情況)
無法使用ctrl +D 快捷鍵退出,只能使用ctrl + c退出
執行過的命令會再輸入一遍
在項目的issues 上已經有人提出該問題。項目近兩年來並沒有更新。
更多expect項目(各種語言版本的)可以參考維基百科 ,不過維基百科上提到的goexpect、go-expect 兩個模塊經測試並不能成功。
※如何實現linux+windows雙系統啟動
※手指上的安全
TAG:尤沐西子 |