1、什麼是expect
在做系統管理時,我們很多時候需要輸入密碼,例如:連線 ssh,連線ftp,那麼如何能做到不輸入密碼,我們需要有乙個工具,能代替我們實現與終端的互動,它能夠代替我們實現與終端的互動,我們不必再守候在電腦旁邊輸入密碼,或是根據系統的輸出再執行相應的命令,這些都可以由expect代替我們來完成
expect到底是什麼?
expect是一種指令碼語言,使用起來非常簡單
2、安裝expect
yum -y install expect
3、示例
#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispassr"
interact
1.[#!/usr/bin/expect]
這一行告訴作業系統指令碼裡的**使用那乙個shell來執行。這裡的expect其實和linux下的bash、windows下的cmd是一類東西
注意:這一行需要在指令碼的第一行
2.[set timeout 30]
基本上認識英文的都知道這是設定超時時間的,現在你只要記住他的計時單位是:秒
3.[spawn ssh -l username 192.168.1.1]
spawn是進入expect環境後才可以執行的expect內部命令,如果沒有裝expect或者直接在預設的shell下執行是找不到spawn命 令的。所以不要用 「which spawn「之類的命令去找spawn命令。好比windows裡的dir就是乙個內部命令,這個命令由shell自帶,你無法找到乙個dir.com 或 dir.exe 的可執行檔案
它主要的功能是給ssh執行程序加個殼,用來傳遞互動指令
4.[expect "password:"]
這裡的expect也是expect的乙個內部命令,有點暈吧,expect的shell命令和內部命令是一樣的,但不是乙個功能,習慣就好了。這個命 令的意思是判斷上次輸出結果裡是否包含「password:」的字串,如果有則立即返回,否則就等待一段時間後返回,這裡等待時長就是前面設定的30秒
5.[send "ispassr"]
這裡就是執行互動動作,與手工輸入密碼的動作等效
6.[interact]
執行完成後保持互動狀態,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登入完成後會退出,而不是留在遠端終端上。如果你只是登入過去執行
svn更新
#!/usr/bin/expect -f
set user admin
set pass 123456
# the working copy we're going to update
set wc /data/www/www.data.com
set log /var/log/svn.log
set svnbin /usr/bin/svn
set timeout 30
spawn $svnbin update -r head --force $wc
expect
"*username:*"
"*password for '*':*"
"*store password unencrypted (yes/no)?*"
}
Linux中expect自動互動指令碼的使用
最近在一台物理機上同時執行64個虛擬機器進行測試,但每台虛擬機器的操作都是一樣的,所以用指令碼來操作會方便很多,但唯一的問題就是要自動登入64臺虛擬機器後再進行操作,利用expect能解決這個問題。expect是用來進行自動化控制和測試的工具,在ubuntu14的安裝方法是 apt get inst...
linux下的終端利器 tmux 安裝以及使用
ref 為什麼使用tmux?因為如果我們用terminal連線remote server。發生一些不可抗力,terminal關了的話,your work is gone 但是tmux不一樣,即使你關閉了tmux。下次重新attch的時候,你會發現之前的東西都還在。這是因為即使你關閉了tmux,它也還...
linux 下expect的使用
usr bin expect set timeout 60 spawn ssh l guest 210.45.114.190 expect password expect guest node43 send cd sa11011033 r expect guest node43 send touch...