1. 程式人生 > >27 分發系統介紹 expect腳本遠程登錄 expect腳本遠程執行命令 expect腳本傳遞參數

27 分發系統介紹 expect腳本遠程登錄 expect腳本遠程執行命令 expect腳本傳遞參數

十八周一次課(4月25日)

20.27 分發系統介紹
客戶端APP的後端即是服務使用的語言是PHP,所以要想運行一些新的代碼,那要在LAMP或LNMP環境下,最後還需要把代碼上傳到服務器上去,當業務需求變動時,需要新的功能,那需要更改代碼,一臺或幾臺服務器還可以應付,但服務器幾十上百臺,存儲都是一臺網站上的數據 ,那需要一個端口去承載,例如這個端口承載著50臺服務器,這時候就需要搞一下分發系統了,可以把你最新更改的代碼分別的發送到這些機器上去,分發系統其實也是一個上線的shell腳本,它的核心是expect,它和shell非常相似,它可以遠程傳送文件,還可以遠程執行命令,不需要輸入帳號密碼,它實施是首先要準備一個模擬的機器,是最新的代碼,是準備要上線的代碼的機器,然後這50臺服務器的IP 帳號 密碼都要知道,通過expeck腳本借助於rsync把這些代碼推送到這50臺機器上,假如還需要執行一些命令,可以通以expeck去登陸這些機器去執行命令,就是這樣的一個過程

20.28 expect腳本遠程登錄
技術分享圖片
技術分享圖片
內容如下:
#! /usr/bin/expect
set host "192.168.137.130"
set passwd "liang.123"
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue} \r表示回車 exp_continue表示繼續
“password:" { send "$passwd\r" }
}
interact 表示 結束,它的作用是停留在遠程的機器上,不需要退出來

如果用expect eof 表示遠程登陸後會停留1-2秒就會退出來
如果這2個都不用,登陸後就會又馬上退出來
技術分享圖片
給它加上執行權限,再運行腳本,成功遠程登陸
技術分享圖片
20.29 expect腳本遠程執行命令
技術分享圖片
vi 2.expect
#!/usr/bin/expect
set user "root"
set passwd "liang.123"
spawn ssh [email protected]

expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }

}
expect "]"
send "touch /tmp/12.txt\r"
expect "]
"
send "echo 1212 > /tmp/12.txt\r"
expect "]*"
send "exit\r"
技術分享圖片
給這個腳本添加執行的權限
chmod a+x 2.expect
執行這個腳本,遠程登陸了,再執行了2條命令,然後退出來了
技術分享圖片
執行1.expect 遠程登陸後,在/tmp查看是否有12.txt,並cat查看內容
技術分享圖片
20.30expect腳本傳遞參數
技術分享圖片
vi 3.expect
內容
#!/usr/bin/expect

set user [lindex $argv 0] 第一個變量參數的值賦給user
set host [lindex $argv 1] 第一個變量參數的值賦給host
set passwd "liang.123"
set cm [lindex $argv 2] 第三個參數cm
spawn ssh $user@$host

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]"
send "$cm\r"
expect "]
"
send "exit\r"
技術分享圖片
添加權限
chmod a+x 3.expect
技術分享圖片
執行腳本,並輸入3個參數 首先要登陸到遠程的機器,再執行命令
技術分享圖片
執行多個命令
技術分享圖片

27 分發系統介紹 expect腳本遠程登錄 expect腳本遠程執行命令 expect腳本傳遞參數