expect是基于tcl語言,實作了使用者通過ssh遠端登陸裝置,可實作無互動自動登陸的相關軟軟體,其中關于在使用expect的腳本應用中使用能過是管理者通過該指令對與管理大量裝置進行維護具有很好的應用價值,接下來将對我最近使用的關于expect的應用進行介紹。以及在應用過程中出現的問題進行總結:
expect在使用中出現的關鍵詞:
expect:
1、spawn:該指令是進入expect環境後才能執行的内部指令,不能單獨應用于shell環境。
2、expect:這裡是指expect的内部指令,主要功能是判斷輸出結果是否包含某項字元串,沒有立即傳回,否則就等待一段時間後傳回,其中等待時間通過timeout進行設定
3、send:執行互動動作,将互動要執行的動作進行輸入給互動指令,同時指令字元串結尾要接上“\n”。
4、interact:執行完後保持互動狀态,将控制權交給控制台,否則将會自動退出
5、expect eof:expect結束标志。
6、$argv:expect腳本可以結束從bash傳遞過來的參數[lindex $argv n],n從0開時
7、set timeout設定等待時間。預設機關為s,其中當設定為-1的時候表示永不逾時。
8、exp_continue:表示繼續執行接下來的互動動作。
在使用expect的時候,首先工作就是要确定linux伺服器中安裝有expect軟體:
<code>[root@node1 xuexi]</code><code># rpm -qa | grep expect //查詢liux伺服器中是否已經安裝expect該軟體包</code>
<code>expect-5.44.1.15-5.el6_4.x86_64</code>
<code>[root@node1 xuexi]</code><code>#yum -y install expect //如果沒有安裝則可以通過yum對其進行安裝</code>
腳本執行個體:
<code>#!/usr/bin/expect</code>
<code>set</code> <code>iptables [lindex $argv 0]</code>
<code>set</code> <code>passwd</code> <code>"123456"</code>
<code>set</code> <code>timeout 30</code>
<code>spawn </code><code>ssh</code> <code>root@$iptables</code>
<code>expect {</code>
<code>"yes/no"</code> <code>{ send </code><code>"yes\n"</code><code>;exp_continue}</code>
<code>"password:"</code> <code>{ send </code><code>"$passwd\n"</code><code>}</code>
<code>}</code>
<code>expect </code><code>"]#"</code>
<code>send </code><code>"df -h;top -n 2\n"</code>
<code>expect eof</code>
<code>exit</code>
建立位址清單touch list.txt
通過for循環語句對其list.txt所包含的裝置進行讀取
<code>[root@node1 xuexi]</code><code># for i in $(cat list.txt);do ./v4.sh $i;done</code>
運作過程中出現如下提示:
Permission denied, please try again.
應首先确認要登陸的linux伺服器是否已經安裝expect軟體包,第二檢視腳本中是否含有exp_continue的标志。
如果裝置第一次登陸如果腳本中不含有exp_continue則會在輸入密碼的時候出現上述提示資訊。
本文轉自 CARYFLASH 51CTO部落格,原文連結:http://blog.51cto.com/maoxiaoxiong/1840492