Linux學習總結(六十四)expect腳本下
阿新 • • 發佈:2018-06-16
文件同步 需要 send roo expect腳本 腳本批量 工具 lin 遠程主機 一 文件分發系統
需求背景對於大公司而言,肯定時不時會有網站或者配置文件更新,而且使用的機器肯定也是好多臺,少則幾臺,多則幾十甚至上百臺。所以,自動同步文件是至關重要的。
實現思路首先要有一臺模板機器,把要分發的文件準備好,然後只要使用 expect腳本批量把需要同步的文件分發到目標機器即可。
核心命令rsync -av --files-from=list.txt / root@host:/
具體實現:
- 創建expect腳本,調用上面的核心命令,實現文件同步
- 創建文件列表和ip列表,指定要分發的文件路徑和分發對象主機。
- 創建一個shell腳本,對上面指定的ip列表進行循環遍歷,並調用expect腳本分發文件。
1 vim rsync.expect#!/usr/bin/expect set passwd "123456" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync -avR --files-from=$file / root@$host:/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof
2 兩個列表文件
vim filelist.txt /root/123.txt /usr/local/sbin/lvs_dr.sh ... vim iplist.txt 192.168.226.130 192.168.225.131 ...
3 vim rsync.sh
#!/bin/bash for ip in `cat iplist.txt`;do ./rsync.expect $ip filelist.txt done
二 多臺機器的命令分發
仿照上面的思路,就是用expect腳本在遠程主機上執行命令,再用shell腳本對遠程主機ip做一個循環,再調用expect腳本即可。
1 編寫expect腳本
vim command.expect#!/usr/bin/expect set host [lindex $argv 0] set passwd "123456" set cm [lindex $argv 1] spawn ssh root@$host expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect "]*" send "$cm\r" expect "]*" send "exit\r"
2 編寫ip列表文件
vim iplist.txt 192.168.226.130 192.168.226.131 ...
3 編寫shell循環腳本
vim command.sh for ip in `cat iplist.txt`;do ./command.expect $ip "ls" done
備註:用expect腳本上線代碼僅僅是一種思路,如果采用了秘鑰認證,當然可以直接使用shell腳本調用rsync命令,再做一個循環就可以。後續還需要學習更高級的工具來上線代碼,比如git。
Linux學習總結(六十四)expect腳本下