1. 程式人生 > >expect腳本同步文件、expect指定host和要同步的文件、構建文件分發系統、批量遠程執行命令

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

expect

一、expect腳本同步文件

自動同步文件 ,把遠程的文件同步到本機

cd /usr/local/sbin

1.腳本內容:


#!/usr/bin/expect
set passwd "123456"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/

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

expect eof

(使用expect eof 會在登錄後停留一會再退出,如果不添加這行或者interact,則登錄後立馬退出)



2.編寫完腳本後,修改腳本權限:

chmod a+x syn.expect


3.執行腳本:

./syn.expect

技術分享圖片


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

指定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


#!/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


2.修改腳本權限:chmod a+x syn_1.expect

3.執行腳本:

./rsy_1.expect 192.168.136.134 "/tmp/test.com.log"

(第一個參數是主機,第二個參數是要同步的文件)

技術分享圖片



三、構建文件分發系統

技術分享圖片

首先要有一個要同步的文件列表和一個同步機器的ip列表:


1.創建同步文件列表:

vim /tmp/list.txt

/tmp/12.txt

/root/111/4913

....

(文件中是寫要同步的本機同步文件路徑(絕對路徑),要同步的文件的路徑在對方機器上要有,否則要在同步命令中加上-R。rsync -avR)


2.創建同步機器ip列表(因為實際中遠程同步的機器不止一臺)

vim /tmp/ip.list

192.168.136.134

192.168.136.136

...

在這些同步的機器,這裏測試是保證它們的密碼都是一樣的。否則就是要每個主機登陸

密碼都要設定。或者設定密鑰認證,這樣就可以省略腳本中輸入密碼的那行內容:"password:" { send "$passwd\r" }


3.創建腳本:

vim /usr/local/sbin/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

(rsync -avR 這個-R選項能使同步機器不存在的文件路徑級聯創建)

編寫完腳本要修改權限 chmod a+x /usr/local/sbin/rsync.expect


4.創建一個shell腳本去執行expect腳本內容:

vim /usr/local/sbin/rsync.sh

rsync.sh 內容
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
echo $ip
./rsync.expect $ip list.txt
done


5.執行shell腳本

sh -x /usr/local/sbin/rsync.sh



四、批量遠程執行命令

1.expect腳本內容:vim /usr/local/sbin/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"


2.編寫shell執行expect腳本

vim /usr/local/sbin/exe.sh

#!/bin/bash
for ip in `cat /tmp/ip.list`
do
echo $ip
./exe.expect $ip "w;free -m;ls /tmp"
done


執行w;free -m;ls /tmp命令

















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