1. 程式人生 > >expect實現自動登入指令碼

expect實現自動登入指令碼

寫在前面:目前在公司是一人一臺虛擬機器,大多數工作都要在虛擬機器上完成,為此每天要執行很多次【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等功能等~