expect實現自動登入指令碼
阿新 • • 發佈:2018-12-24
寫在前面:目前在公司是一人一臺虛擬機器,大多數工作都要在虛擬機器上完成,為此每天要執行很多次【ssh [email protected]】指令登入虛擬機器;有很多方式解決這個問題,如使用xshell、secureCRT等工具記錄常用的連線,我就寫了一個簡單的指令碼實現一鍵登入~
login.sh指令碼內容如下:
#!/usr/bin/expect
spawn ssh xxx@xxxxxx
expect "*password:"
send "密碼\r"
interact
再將【./login.sh】配置別名alias,或移動到可執行目錄中,即可實現【login】一鍵登入;
expect是一個處理互動的指令,通過expect我們可以把互動過程寫到Shell腳本里以實現一些自動化操作~
expect有四個核心的指令:
- spawn:啟動新程序,後跟新程序要執行的指令;
- expect:指定要監聽的字串,如果spawn程序返回了匹配的字串(如標準輸入的提示資訊),則觸發send;
- send:傳送指定的字串到spawn程序,代替標準輸入;
- interact:使用者參與互動;
對於login.sh的執行過程為:
【spawn】啟動一個新程序執行ssh登入指令,【expect】監聽到標準輸入的提示資訊『[email protected]’s password』符合匹配規則,觸發【send】傳送密碼代替手動輸入,完成登入,【interact】使用者參與互動,此時已登入上了虛擬機器;
使用expect還可以完成如:批量更新git程式碼庫、自動登入FTP等功能等~