這裡我們主要講使用expect實現自動輸入功能:
安裝:centos下安裝命令,如下:
yum install expect
開始之前的乙個簡單例項:
[plain]
view plain
copy
#!/usr/bin/expect
spawn ssh [email protected]
expect "*password:"
send "123\r"
expect "*#"
interact
expect是乙個用來處理互動的命令。我們可以使用expect完成ftp和scp登陸的時候密碼的自動輸入。
expect基礎
expect常用的四個命令:
spawn
啟動新的程序
expect
從程序接收字串
send用於向程序傳送字串
interact允許使用者互動
詳細解釋:
spawn
命令用來啟動新的程序,spawn
後的send
和expect
命令都是和使用spawn
開啟的程序進行互動。
send
命令接收乙個字串引數,並將該引數傳送到程序。
expect
命令和send
命令相反,expect
通常用來等待乙個程序的反饋,我們根據程序的反饋,再傳送對應的互動命令。
interact
命令用的其實不是很多,一般情況下使用spawn
、send
和expect
命令就可以很好的完成我們的任務;但在一些特殊場合下還是需要使用interact
命令的,interact
命令主要用於退出自動化,進入人工互動。比如我們使用spawn
、send
和expect
interact
命令就可以很好的完成這個任務。
栗子:[plain]
view plain
copy
#!/bin/expect
set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*"
interact
這是一段非常簡單的expect
示例**,演示了expect
的基本使用方法。
#!/usr/tcl/bin/expect
:使用expect
來解釋該指令碼;
set timeout 30
:設定超時時間,單位為秒,預設情況下是10秒;
set host "101.200.241.109"
:設定變數;
spawn ssh $username@$host
:spawn是進入expect環境後才可以執行的expect內部命令,如果沒有裝expect或者直接在預設的shell下執行是找不到spawn命令的。它主要的功能是給ssh執行程序加個殼,用來傳遞互動指令;
expect "*password*"
:這裡的expect也是expect的乙個內部命令,這個命令的意思是判斷上次輸出結果裡是否包含「password」的字串,如果有則立即返回;否則就等待一段時間後返回,這裡等待時長就是前面設定的30秒;
send "$password\r"
:當匹配到對應的輸出結果時,就傳送密碼到開啟的ssh程序,執行互動動作;
interact
:執行完成後保持互動狀態,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登入完成後會退出,而不是留在遠端終端上。
這就是對上述這段簡單簡單指令碼的分析,在上述的示例中,涉及到expect
中乙個非常重要的概念——模式-動作;即上述expect "*password*"
這句**表達出來的含義。
模式-動作
結合著expect "*password*"
這句**來說說「模式-動作」。簡單的說就是匹配到乙個模式,就執行對應的動作;匹配到password字串,就輸入密碼。你可能也會看到這樣的**:
expect
eof
}
其中exp_continue
表示迴圈式匹配,通常匹配之後都會退出語句,但如果有exp_continue
則可以不斷迴圈匹配,輸入多條命令,簡化寫法。
傳參很多時候,我們需要傳遞引數到指令碼中,現在通過下面這段**來看看如何在expect
中使用引數:
#!/usr/tcl/bin/expect
ifset
timeout -1
sethost
[lindex $argv 0]
setusername
[lindex $argv 1]
setpassword
[lindex $argv 2]
spawn ssh $username@$host
expect
"*password*"
interact
在expect中,$argc表示引數個數,而引數值存放在$argv中,比如取第乙個引數就是[lindex $argv 0]
,以此類推。 shell指令碼 自動輸入密碼
平時在控制台輸入指令如 sudo ssh ftp或者修改admin許可權的檔案時候都會要求輸入password,但是在she ll指令碼執行過程中該如何互動實現自動輸入密碼呢?下面總結三種實現方法。shell用重定向作為標準輸入的用法是 cmd 實現ftp自動登入並執行ls指令的用法如下 其中pet...
linux指令碼實現自動輸入密碼
使用linux的程式設計師對輸入密碼這個舉動一定不陌生,在linux下對使用者有嚴格的許可權限制,幹很多事情越過了許可權就得輸入密碼,比如使用超級使用者執行命令,又比如ftp ssh連線遠端主機等等,如下圖 那麼問題來了,在指令碼自動化執行的時候需要輸入密碼怎麼辦?比如你的指令碼裡有一條scp語句,...
shell實現的密碼輸入指令碼,可將輸入字元轉換為
bin ksh 該段指令碼實現輸入密碼並且用 號顯示輸入字元,輸入回車鍵終止輸入密碼。該 在sco 5.05上 ksh下已經除錯通過。河南 平頂山 王向宇 2005.05.11 該函式實現無緩衝輸入乙個字元,並傳給位置引數 getchar clear 將游標定位到15行10列 tput cup 15...