2018-7-20
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