小型自動化運維 expect指令碼V2版

2021-09-21 05:04:47 字數 1673 閱讀 3505

小型自動化運維--expect指令碼v2版

在實際運維工作中,需要我們向遠端主機同步資料,可以用rsync來實現。那麼用expect指令碼怎麼實現資料傳輸完成之後自動退出遠端主機呢?在開始expect指令碼v2版之前,我們先來看下,使用expect指令碼來實現遠端主機的登入,指令碼如下:

#! /usr/bin/expect

set host "192.168.8.120"

set passwd "wtf"

spawn ssh root@$host

expect

"password:"

}interact

注:上面指令碼不明白的童鞋,請檢視下我的51cto部落格:小型自動化運維--expect指令碼!

對上面指令碼進行擴充,即是我們現在要說的expect指令碼v2版:

#!/usr/bin/expect

set timeout -1  ##表示永不超時,timeout 0表示立即超時

set host "192.168.8.120"

set passwd "wtf"

spawn ssh root@$host

expect

"password:"

}expect "]*"

send "touch /tmp/12.txt\r"

expect "]*"

send "echo 1212 > /tmp/12.txt\r"

expect "]*"

send "exit\r"

expect eof

對帶顏色部分指令碼進行說明:

語法結構很簡單,自動登入的 expect 指令碼,增加固定語法

expect "]*"

send "command"

expect "]*"

send "command"

..........

expect "]*"

send "exit\r"

注:

(1)expect "]*" 這裡的 * 表示萬用字元

,可以是 $,也可以是 #,root 使用者的命令列提示符為 [root@localhost sbin]# , 是以 「]*」 結尾的,當 expect 指令碼遇到 「]*」 則傳送命令。

建議:這裡的符號最好是到機器上面確認一下,如果是 # ,為了標準化,也可以把統配符 *

改為 標準匹配 #。

(2)可以再 #! /usr/bin/expect 下面增加一行 set timeout 30,表示如果 30 秒還沒有連線成功,則取消嘗試。

set timeout -1 , 則表示永不超時。如果不設定 timeout ,有可能在傳輸較大的檔案的時候中斷。

最後,對檔案授予執行許可權

[root@cacti sbin]# chmod +x 2.expect

執行結果,截圖如下:

小型自動化運維 expect指令碼

小型自動化運維 expect指令碼 expect可以讓我們實現自動登入遠端機器,並且可以實現自動遠端執行命令。知道使用者名稱和密碼或者是使用金鑰驗證都可以使用,下面介紹expect 指令碼實現登陸和遠端命令 yum install y expect openssh clients 依賴 ssh 通訊...

小型自動化運維 expect指令碼之傳遞函式

小型自動化運維 expect指令碼之傳遞函式 root shiyanji vim 3.expect usr bin expect set user lindex ar 0 set host lindex ar 1 set passwd wtf set cm lindex ar 2 spawn ssh...

Linux 自動化運維之expect

expect是乙個自動化互動套件,主要應用於執行命令和程式時,系統以互動形式要求輸入指定字串,實現互動通訊。expect自動互動流程 spawn啟動指定程序 expect獲取指定關鍵字 send向指定程式傳送指定字元 執行完成退出.注意該指令碼能夠執行的前提是安裝了expect yum instal...