亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

利用expect命令實現Shell自動化交互的方法詳解

2020-07-27 18:49:36
字體:
來源:轉載
供稿:網友

背景

linux腳本中有很多場景是進行遠程操作的,例如遠程登錄ssh、遠程復制scp、文件傳輸sftp等。這些命令中都會涉及到安全密碼的輸入,正常使用命令時是需要人工手動輸入密碼并接受安全驗證的。為了實現自動化遠程操作,我們可以借用expect的功能。

expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預。expect是不斷發展的,隨著時間的流逝,其功能越來越強大,已經成為系統管理員的的一個強大助手。expect需要Tcl編程語言的支持,要在系統上運行expect必須首先安裝Tcl。

expect的安裝

expect是在Tcl基礎上創建起來的,所以在安裝expect前我們應該先安裝Tcl。

(一)Tcl 安裝

主頁: http://www.tcl.tk

下載地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml

1.下載源碼包

wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz 

2.解壓縮源碼包

tar xfvz tcl8.4.11-src.tar.gz 

3.安裝配置

cd tcl8.4.11/unix ./configure --prefix=/usr/tcl --enable-shared make make install 

注意:

1、安裝完畢以后,進入tcl源代碼的根目錄,把子目錄unix下面的tclUnixPort.h copy到子目錄generic中。

2、暫時不要刪除tcl源代碼,因為expect的安裝過程還需要用。

(二)expect 安裝 (需Tcl的庫)

主頁: http://expect.nist.gov/

1.下載源碼包

wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download 

2.解壓縮源碼包

tar xzvf expect5.45.tar.gz 

3.安裝配置

cd expect5.45 ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic make make install ln -s /usr/tcl/bin/expect /usr/expect/bin/expect 

expect

expect的核心是spawn、expect、send、set。

spawn 調用要執行的命令

  • expect 等待命令提示信息的出現,也就是捕捉用戶輸入的提示:
  • send 發送需要交互的值,替代了用戶手動輸入內容
  • set 設置變量值
  • interact 執行完成后保持交互狀態,把控制權交給控制臺,這個時候就可以手工操作了。如果沒有這一句登錄完成后會退出,而不是留在遠程終端上。
  • expect eof 這個一定要加,與spawn對應表示捕獲終端輸出信息終止,類似于if....endif

expect腳本必須以interact或expect eof結束,執行自動化任務通常expect eof就夠了。

其他設置

  • 設置expect永不超時 set timeout -1
  • 設置expect 300秒超時,如果超過300沒有expect內容出現,則退出 set timeout 300

expect編寫語法

expect使用的是tcl語法

  • 一條Tcl命令由空格分割的單詞組成. 其中, 第一個單詞是命令名稱, 其余的是命令參數
    cmd arg arg arg
  • $符號代表變量的值. 在本例中, 變量名稱是foo.
    $foo
  • 方括號執行了一個嵌套命令. 例如, 如果你想傳遞一個命令的結果作為另外一個命令的參數, 那么你使用這個符號
    [cmd arg]
  • 雙引號把詞組標記為命令的一個參數. "$"符號和方括號在雙引號內仍被解釋
    "some stuff"
  • 大括號也把詞組標記為命令的一個參數. 但是, 其他符號在大括號內不被解釋
    {some stuff}
  • 反斜線符號是用來引用特殊符號. 例如:n 代表換行. 反斜線符號也被用來關閉"$"符號, 引號,方括號和大括號的特殊含義

示例

login.exp專用于遠程登錄,快捷使用方式: login.exp "exclude" "${remote_ip}" "${remote_user}" "${remote_passwd}" "${remote_command}"

#!/usr/bin/expect -f########################################################### 通過SSH登陸和執行命令#參數:1.Use_Type [check/execute]#  2.SSHServerIp#  3.SSHUser#  4.SSHPassword#  5.CommandList [多個命令間以;間隔]#返回值:#  0 成功#  1 參數個數不正確#  2 SSH 服務器服務沒有打開#  3 SSH 用戶密碼不正確#  4 連接SSH服務器超時##########################################################proc usage {} { regsub ".*/" $::argv0 "" name send_user "Usage:/n" send_user " $name Use_Type SSHServerIp SSHUser SSHPassword CommandList/n" exit 1} ## 判斷參數個數if {[llength $argv] != 5} { usage}#設置變量值set Use_Type [lindex $argv 0]set SSHServerIp [lindex $argv 1]set SSHUser [lindex $argv 2]set SSHPassword [lindex $argv 3]set CommandList [lindex $argv 4]#spawn ping ${SSHServerIp} -w 5#expect {# -nocase -re "100% packet loss" {#  send_error "Ping ${SSHServerIp} is unreachable, Please check the IP address./n"#  exit 1# }#}set timeout 360set resssh 0#定義變量標記ssh連接時是否輸入yes確認set inputYes 0set ok_string LOGIN_SUCCESSif {$Use_Type=="check"} { #激活ssh連接,如果要需要輸入yes確認,輸入yes,設置inputYes為1,否則輸入ssh密碼 spawn ssh ${SSHUser}@${SSHServerIp} "echo $ok_string"} else {    spawn ssh ${SSHUser}@${SSHServerIp} "$CommandList"}expect { -nocase -re "yes/no" {  send -- "yes/n"  set inputYes 1 } -nocase -re "assword: " {  send -- "${SSHPassword}/n"  set resssh 1 } #-nocase -re "Last login: " {  #  send -- "${CommandList}/n" #} $ok_string {} -nocase -re "Connection refused" {  send_error "SSH services at ${SSHServerIp} is not active./n"  exit 2 } timeout {  send_error "Connect to SSH server ${SSHUser}@${SSHServerIp} timeout(10s)./n"  exit 4 }}#如果輸入了yes確認,輸入ssh密碼if {$inputYes==1} { expect {  -nocase -re "assword: " {   send -- "${SSHPassword}/n"   set resssh 1  } }}#如果出現try again或者password:提示,說明輸入的用戶密碼錯誤,直接退出。if {$resssh==1} { expect {  -nocase -re "try again" {   send_error "SSH user:${SSHUser} passwd error./n"   exit 3  }  -nocase -re "assword:" {   send_error "SSH user:${SSHUser} passwd error./n"   exit 3  }  eof {} }}send_error -- "$expect_out(buffer)"#-nocase -re "No such user" {#  send_error "No such user./n"#  exit 5# }#exit

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人夜晚看av| 亚洲精品美女在线| 亚洲天堂av在线免费| 久久99精品视频一区97| 国产精品久久久av久久久| 久久男人的天堂| 久久亚洲私人国产精品va| 国产xxx69麻豆国语对白| 欧美激情精品在线| 亚洲第一福利视频| 亚洲石原莉奈一区二区在线观看| 国产精品扒开腿做| 亚洲精品美女在线| 欧美寡妇偷汉性猛交| 日日狠狠久久偷偷四色综合免费| 国产精自产拍久久久久久| 亚洲欧洲美洲在线综合| 国产精品日韩电影| 91亚洲精品在线| 亚洲最新中文字幕| 国产精品第1页| 91精品久久久久久综合乱菊| 成人伊人精品色xxxx视频| 国产精品久久视频| 亚洲女人天堂视频| 国产午夜精品一区二区三区| 久久精品久久精品亚洲人| 欧洲s码亚洲m码精品一区| 国产91精品久久久久久久| 亚洲免费av片| 精品久久久91| 国产精品久久久久久一区二区| 91国内产香蕉| 91久久国产婷婷一区二区| 国产女精品视频网站免费| 精品日韩视频在线观看| 国产男女猛烈无遮挡91| 国产成人激情视频| 不卡av日日日| 日韩在线观看高清| 黑人巨大精品欧美一区二区三区| 国产精品免费观看在线| 精品欧美激情精品一区| 欧洲成人免费aa| 欧美日韩国产二区| 538国产精品视频一区二区| 亚洲国内精品在线| 精品自拍视频在线观看| 国产欧美一区二区白浆黑人| 成人av在线亚洲| 青青在线视频一区二区三区| 欧美日韩国产丝袜美女| 欧美一级电影久久| 国产日韩欧美中文在线播放| 亚洲综合视频1区| 精品国产欧美一区二区三区成人| 国产亚洲欧美日韩一区二区| 91精品久久久久久久久| 亚洲午夜女主播在线直播| 亚洲色无码播放| 97色在线播放视频| xvideos成人免费中文版| 亚洲精品视频免费| 久国内精品在线| 欧美国产视频一区二区| 欧美老女人xx| 伊人男人综合视频网| 久久精品视频在线播放| 日本国产高清不卡| 欧美日韩在线影院| 欧美日韩在线视频观看| 日韩在线观看电影| 亚洲91精品在线| 波霸ol色综合久久| 成人中心免费视频| 日韩中文字幕在线免费观看| 日韩精品视频中文在线观看| 国产精品国产亚洲伊人久久| 精品久久久久久久久久| 欧美日韩亚洲一区二区三区| 亚洲成人免费网站| 亚洲欧美激情精品一区二区| 成人黄色免费在线观看| 国产精品www网站| 亚洲视频一区二区| 国产一区二区色| 中文字幕亚洲专区| 亚洲精品国产精品自产a区红杏吧| 亚洲天天在线日亚洲洲精| 日韩成人在线视频观看| 日韩女优在线播放| 国产精品日韩精品| 欧美在线影院在线视频| 狠狠色狠色综合曰曰| 亚洲电影中文字幕| 91牛牛免费视频| 亚洲欧洲日韩国产| 米奇精品一区二区三区在线观看| 美女性感视频久久久| 欧美美女18p| 日韩成人中文字幕在线观看| 国产成人在线亚洲欧美| 91wwwcom在线观看| 欧美在线视频网| 亚洲天堂影视av| 日韩最新中文字幕电影免费看| 91精品国产高清久久久久久久久| 97在线视频免费播放| 欧美电影《睫毛膏》| 成人性生交大片免费看视频直播| 亚洲午夜久久久影院| 精品亚洲一区二区| 91chinesevideo永久地址| 91国偷自产一区二区三区的观看方式| 韩国19禁主播vip福利视频| 性欧美xxxx视频在线观看| 俺去亚洲欧洲欧美日韩| 久久久成人的性感天堂| 国产亚洲精品综合一区91| 久久久久这里只有精品| 欧美激情国产日韩精品一区18| 日韩大陆毛片av| 91精品啪在线观看麻豆免费| 456国产精品| 国产99视频精品免视看7| 91po在线观看91精品国产性色| 国产亚洲精品美女| 亚洲香蕉av在线一区二区三区| 国产剧情久久久久久| 粉嫩av一区二区三区免费野| 中文欧美日本在线资源| 日韩av网站在线| 欧美激情videos| 国产精品久久久久久影视| 久久精品久久精品亚洲人| 日韩免费在线看| 国产精品成av人在线视午夜片| 夜夜躁日日躁狠狠久久88av| 揄拍成人国产精品视频| 精品国产一区二区在线| 国产精品嫩草影院久久久| 日韩视频免费大全中文字幕| 国产精品视频在线观看| 欧美在线视频网站| 日韩成人av一区| 亚洲高清久久久久久| 亚洲日韩中文字幕在线播放| 国产精品第七影院| 欧美专区日韩视频| 亚洲缚视频在线观看| xxav国产精品美女主播| 亚洲性av网站| 亚洲乱亚洲乱妇无码| 成人免费视频在线观看超级碰| 在线播放精品一区二区三区| 久久久久久久久久久91| 亚洲人成网站777色婷婷| 91福利视频网| 26uuu亚洲国产精品| 午夜精品在线观看| 久久精品中文字幕免费mv| 亚洲自拍偷拍网址| 精品视频偷偷看在线观看| 欧美限制级电影在线观看|