20.27分發系統介紹
阿新 • • 發佈:2018-06-06
expect20.27 分發系統介紹
shell項目-分發系統-expect講解
使用場景:
假如公司的業務做得越來越大,APP後端服務端所使用的編程語言是php,要想運行這個環境運行php代碼,需要搭建lamp,lnmp的環境,最後還需要把代碼上傳到服務器上面。
在平時工作中,業務不斷的叠代,有新的功能出現,這時候就需要更改代碼,一臺機器還好,甚至還可以在服務器上面更改,但是這樣不規範,若幹臺,兩三臺的量還可以接受,如果機器特別多,甚至上百臺的時候,這上百臺機器存儲的都是公司的站點。比如一個接口,APP訪問量很大,APP需要調用服務端的接口,假如這個接口需要五十臺機器去承載,那這時候就需要去搞一個分發系統了,能夠讓每天,每段時間更新的代碼,分別的分布到這五十臺機器上面去。
expect介紹
可以說是一種腳本語言,它和shell比較相似,它可以實現傳輸文件,遠程執行命令(不需要輸入密碼)
它其實是一種上線代碼的工具。
上線:開發的代碼,發布到線上環境。
準備工作以及過程:
準備一臺模板機器,這臺機器上面的代碼是最新的,準備要上線的代碼。
比如準備給50臺機器上線,這50臺機器的ip地址,用戶和密碼都需要知道
使用expect腳本,借助於rsync把這些代碼給推送到這50臺機器上面去。假如需要在某機器上面執行命令,還可以遠程執行這些命令。
就是這樣的一個過程。
20.28 expect腳本遠程登錄
1 安裝expect
[root@centos7-01 ~]# yum install -y expect
2 編寫expect腳本
目的:自動遠程登錄,並執行命令
[root@centos7-01 ~]# cd /usr/local/sbin/ #! /usr/bin/expect set host "192.168.189.129" set passwd "?????" #此處輸入你的登錄密碼. spawn ssh root@$host expect { "yes/no" { send "yes\r"; exp_continue} "password:" { send "$passwd\r" } } interact
腳本解釋:
set host "192.168.189.129" set passwd "?????" spawn ssh root@$host 遠程登錄的主機,以及密碼,set host=$host,在except裏,set設定變量 spwan後接的是系統的shell命令,ssh遠程登錄,root@$host利用root登錄進去 expect { "yes/no" { send "yes\r"; exp_continue} "password:" { send "$passwd\r" } } interact 這是核心執行語句 "yes/no"表示第一次遠程登錄192.168.189.129,會提示"yes/no"。因為第一次登錄,本機的/root/.ssh/know_hosts文件會誤認為這是一臺陌生的機器,嚴格上可能是不安全,所以會提示。 "yes/no" { send "yes\r"; exp_continue} expect截取系統的提示,當遇到提示"yes/no"的時候,發送yes(yes\r,\表示回車鍵), exp_continue表示繼續 "password:" { send "$passwd\r" } expect截取系統的提示,當遇到提示"password:"的時候,把密碼(set passwd的變量)發送過去, expect支持用戶交互 interact結束
3 添加執行權限
[root@centos7-01 sbin]# chmod a+x 1.expect
4 執行腳本
[root@centos7-01 sbin]# ./1.expect spawn ssh [email protected] [email protected]'s password: Last login: Wed Jun 6 15:27:39 2018 from 192.168.189.1 [root@centos7-02 ~]#
5 查看ip地址
[root@centos7-02 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.189.129 netmask 255.255.255.0 broadcast 192.168.189.255 inet6 fe80::b485:96d0:c537:251e prefixlen 64 scopeid 0x20<link> ether 00:0c:29:73:7c:4c txqueuelen 1000 (Ethernet) RX packets 266 bytes 27149 (26.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 257 bytes 25678 (25.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
成功登錄192.168.189.129,主機名也變了
20.27分發系統介紹