20.31 expect腳本同步文件
20.32 expect腳本指定host和要同步的文件
20.33 構建文件分發系統
20.34 批量遠程執行命令
expect腳本同步文件
如果把expect eof註釋掉則表示登錄後立馬斷開,更別提傳輸文件了,所以要麼加expect eof,要麼在結尾加interact
註釋掉後和不註釋掉expect eof的兩種測試結果:
expect指定host和要同步的文件
補充(在3.expect中可以在$cm\r下面加一個timeout時間,默認爲10秒,如set timeout 5表示5秒,-1表示不停止)
expect腳本指定host和要同步的文件
注意:①同步過程是從本地到遠程
②file的路徑一定要寫絕對路徑
測試:
構建文件分發系統
需求背景:大公司服務器數量龐大,需要實現多臺機器的自動同步,此時不能按照上述方法單個同步,需要建立一個分發系統,實現自動化批量同步
實現思路:首先要有一臺模板機器,準備分發系統,然後只需要使用expect腳本批量的把需要同步的文件上分別同步到目的機器上
核心命令:rsync -av --files-from=list.txt / root@localhost:/
rysnc.expect腳本
如上圖所示:定義host,file參數,(file同樣必須爲絕對路徑,否則無法同步),使用rsync必須要讓所有的密碼保持一致,否則無法同步,解決辦法重新設置所有密碼一致,(由於此操作會造成安全隱患,一旦expect腳本內容泄露,則會造成所有服務器密碼也泄露),還可以通過密鑰認證的方式省去密碼登錄帶來的潛在安全風險,同時默認SRC目錄存在,否則要加-avR來自動創建
創建文件集 /tmp/list.txt 並輸入需要同步的具體文件絕對路徑
創建需要同步的src IP地址 /tmp/ip.list
編寫rysnc腳本
測試結果:
發現src下/root/shell.1txt不存在,加了rsync -R批量生成目錄,查看src下是否存在
批量遠程執行命令(類似於自動化)
①遠程登錄腳本
②for循環腳本
③測試成功