linux利器expect的使用

2021-09-07 01:47:20 字數 1812 閱讀 8894

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...