shell通過expect實(shí)現(xiàn)在多臺服務(wù)器上交互式批量執(zhí)行命令

需求:在服務(wù)器上批量安裝agent程序,并使用root用戶啟動(dòng)程序膘魄。

為什么要用expect

expect是一個(gè)自動(dòng)化交互套件乌逐,主要應(yīng)用于執(zhí)行命令和程序時(shí),系統(tǒng)以交互形式要求輸入指定字符串创葡,實(shí)現(xiàn)交互通信浙踢。

1.實(shí)現(xiàn)交互式執(zhí)行命令,將程序包發(fā)送到指定服務(wù)器

注:這里的ip.txt文件存儲服務(wù)器ip

#! /bin/bash
cat ip.txt | while read line
do
(
   /usr/bin/expect << EOF
   set time 20
   spawn scp /home/file_agent.tar.gz dcloud@$line:/home/
   expect {
        "*yes/no*"
          { send "yes\r";exp_continue }
        "*password:"
          { send "password\r"} 
   }
   expect eof
EOF
) &>/dev/null
 
   if [ $? -eq 0 ]
   then
       echo "復(fù)制文件到$line成功灿渴!"
   else 
       echo "復(fù)制文件到$line失斅宀ā!"
   fi
done
2.解壓程序包

注:執(zhí)行方式:*.sh command

#! /bin/bash
remote_server()
{
    hosts=`sed -n '/^[^#]/p' ip.txt`
    for host in $hosts
    do
        echo HOST $host
(
        /usr/bin/expect << EOF
        spawn ssh dcloud@$host "$@"
        expect {
            "(*yes/no*)?"
            {send "yes\r";exp_continue}
            "password:"
            {send "password\r"}
        }
        expect eof
EOF
) >>xinxi.txt
     done
     return 0
}

#echo -e "\033[31m執(zhí)行命令 : $@ \033[0m"
remote_server "$@"

3.此腳本目的是實(shí)現(xiàn)將目標(biāo)服務(wù)器切換為root用戶并啟動(dòng)程序自身啟動(dòng)腳本

#! /bin/bash
/usr/bin/expect << EOF
spawn su -
    expect {
        ":"
        {send "password\r"}
    }
    expect -re "\](\$|#) "
    send "bash /home/file/bin/file_agent.sh\r"  #這里為程序本身的啟動(dòng)腳本
    expect eof
EOF

4.將上一個(gè)腳本發(fā)送到指定服務(wù)器并執(zhí)行

#! /bin/bash
scp_sh()
{
    cat ip.txt | while read line
    do
    (
        /usr/bin/expect << EOF
        spawn scp /home/start_file.sh dcloud@$line:/home/  #這里的start_file.sh為上一個(gè)腳本
        expect {
            "*yes/no*"
            { send "yes\r";exp_continue }
            "password:"
            {send "password\r"}
        }
        expect eof
EOF
    )
    done
}

start_sh()
{
    cat ip.txt | while read line
    do
        /usr/bin/expect << EOF
        spawn ssh dcloud@$line
        expect {
            "*yes/no*"
            { send "yes\r";exp_continue }
            "password:"
            {send "password\r"}
        }
        expect -re "\](\$|#) "
        send "bash /home/start_file.sh\r"
        expect eof
EOF
    done
}
scp_sh
start_sh
except總結(jié):
spawn               交互程序開始后面跟命令或者指定程序
expect              獲取匹配信息匹配成功則執(zhí)行expect后面的程序動(dòng)作
send exp_send       用于發(fā)送指定的字符串信息
exp_continue        在expect中多次匹配就需要用到
send_user           用來打印輸出 相當(dāng)于shell中的echo
exit                退出expect腳本
eof                 expect執(zhí)行結(jié)束 退出
set                 定義變量
puts                輸出變量
set timeout         設(shè)置超時(shí)時(shí)間
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子伴奥,更是在濱河造成了極大的恐慌,老刑警劉巖焰扳,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異够话,居然都是意外死亡蓝翰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門女嘲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畜份,“玉大人,你說我怎么就攤上這事欣尼”ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵愕鼓,是天一觀的道長钙态。 經(jīng)常有香客問我,道長菇晃,這世上最難降的妖魔是什么册倒? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮磺送,結(jié)果婚禮上驻子,老公的妹妹穿的比我還像新娘灿意。我一直安慰自己,他們只是感情好崇呵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布缤剧。 她就那樣靜靜地躺著,像睡著了一般域慷。 火紅的嫁衣襯著肌膚如雪荒辕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天犹褒,我揣著相機(jī)與錄音抵窒,去河邊找鬼。 笑死化漆,一個(gè)胖子當(dāng)著我的面吹牛估脆,可吹牛的內(nèi)容都是我干的钦奋。 我是一名探鬼主播座云,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼付材!你這毒婦竟也來了朦拖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厌衔,失蹤者是張志新(化名)和其女友劉穎璧帝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體富寿,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睬隶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了页徐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苏潜。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖变勇,靈堂內(nèi)的尸體忽然破棺而出恤左,到底是詐尸還是另有隱情,我是刑警寧澤搀绣,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布飞袋,位于F島的核電站,受9級特大地震影響链患,放射性物質(zhì)發(fā)生泄漏巧鸭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一麻捻、第九天 我趴在偏房一處隱蔽的房頂上張望纲仍。 院中可真熱鬧览闰,春花似錦、人聲如沸巷折。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锻拘。三九已至油吭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間署拟,已是汗流浹背婉宰。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留推穷,地道東北人心包。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像馒铃,于是被迫代替她去往敵國和親蟹腾。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容