【2018.07.19學習筆記】【linux高級知識 20.27-20.30】

20.27 分發系統介紹

在公司裏,產品服務代碼和配置文件會常常進行更新迭代,而線上服務器又不少的狀況下,就須要使用分發系統進行文件發佈更新。shell

咱們這裏使用上線腳本:expect腳本,他具備遠程登陸、批量發佈文件和批量遠程執行命令的功能服務器

yum install -y expect

通常狀況下,進行批量的機器上線或更新:先準備一臺模版機器(包含最新的代碼文件),準備50臺機器的ip地址列表和用戶密碼列表文件ssh

20.28 expect腳本遠程登陸

編寫expect腳本,實現自動遠程登陸:工具

#!/usr/bin/expect   //使用expect工具執行腳本
set host "192.168.87.132"   //設置變量 ip
set passwd "123456"  //設置密碼
spawn ssh@$host  //遠程登陸
expect{    //與系統交互
    "yes/no" {send "yes\r"; exp_continue }  //檢測到關鍵字是,發送指令並回車
    "password: " {send "$passwd\r"}  //發送密碼回車
}
interact  //結束腳本,保持登陸遠程狀態

20.29 expect腳本遠程執行命令

實現:遠程登陸後,執行命令,而後退出登陸spa

#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh $user@192.168.87.132
expect {
     "yes/no" {send "yes\r"}
	 "password: " {send "$passwd\r"}
}
expect "]*"   //遇到shell命令輸入提示符,則發送指令,*號是通配,由於root用戶是#,普通用戶是$
 send "touch /tmp/12.txt\r"  //發送命令並回車執行
expect "]*"
 send "echo 1 2 n > /tmp/12.txt\r"
expect "]*"
send "exit\r"  //退出遠程登陸狀態

若是腳本結尾,不加 interact 和 expect eof:則開始執行腳本登陸後,就會立刻退出登陸code

set timeout 100s //能夠設置保持登陸狀態時間爲100s,-1s爲不超時
expect eof   //單單加這命令,執行完腳本後,退出登陸狀態。

20.30 expect腳本傳遞參數

$argv 0 1 2: 是expect腳本的第一、二、3個參數ip

#!/usr/bin/expect
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "123456"
set cm [lindex $argv 2]
spawn ssh $user@$host
expect{
    "yes/no" {send "yes\r"}
	"password: " {send "$passwd\r"}
}
expect "]*"
send "$cm\r"

##執行腳本:
./cm.expect root 192.168.87.132 "ls;w;vmstat 1"
相關文章
相關標籤/搜索