1. 程式人生 > >2018-7-20

2018-7-20

分發系統 去掉 會有 主機ip sync end rsync 否則 更新

20.31 expect腳本同步文件
20.32 expect腳本指定host和要同步的文件
20.33 構建文件分發系統
20.34 批量遠程執行命令



20.31 expect腳本同步文件

指定host和要同步的文件

#!/usr/bin/expect

set passwd "123456"

set host [lindex $argv 0]

set file [lindex $argv 1]

spawn rsync -av $file root@$host:$file

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof


例子:

set passwd "123456"

set rsync -av [email protected]:/tmp/1.txt /tmp/ //遠程同步文件

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof


修改權限chmod a+x 執行腳本


如果註釋掉expect eof,會沒再沒有傳輸時就退出,expct eof不可少,表示能給足夠的時間去做一些操作,否則登陸馬上結束





20.32 expect腳本指定host和要同步的文件


指定host和要同步的文件

#!/usr/bin/expect

set passwd "123456"

set host [lindex $argv 0] //主機ip

set file [lindex $argv 1] //要同步的文件

spawn rsync -av $file root@$host:$file //$file一定要些絕對路徑

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof











20.33 構建文件分發系統

需求背景:

對於大公司而言,肯定時不時會有網站或者配置文件更新,而且使用的機器肯定也是好多臺,少則幾臺,多則幾十甚至上百臺。所以,自動同步文件是至關重要的。

實現思路:

首先要有一臺模板機器,把要分發的文件準備好,然後只要使用expect腳本批量把需要同步的文件分發到目標機器即可。

核心命令rsync -av --files-from=list.txt / root@host:/



文件分發系統的實現

rsync.expect 內容:

#!/usr/bin/expect

set passwd "123456"

set host [lindex $argv 0]

set file [lindex $argv 1]

spawn rsync -av --files-from=$file / root@$host:/

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof


還需要寫一下list.tmp

vim /tmp/list.tmp

/tmp/1.txt

/root/shell/1.sh //這裏都要是同步的文件, 要保證有這個路徑


ip.list //遠程同步的機器不止一臺

ip1

ip2

. //要保證兩臺機器密碼一樣,如果不同需要挨個去定義。而且存在風險。 所以可以在上面去掉輸入密碼 使用密鑰認證


rsync.sh 內容

#!/bin/bash

for ip in `cat ip.list`

do

echo $ip

./rsync.expect $ip list.txt

done

給予執行權限



20.34 批量遠程執行命令

exe.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"



還需要定義一個exe.sh腳本

#!/bin/bash

for ip in `cat ip.list`

do

echo $ip

./exe.expect $ip "w;free -m;ls /tmp"

done



2018-7-20