标签:shell expect 分发系统 批量同步文件 批量执行命令
分发系统-批量同步将指定文件传送到多个ip的相同目录下
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
说明:
必须相同密码,也可以设置秘钥登录即可;
核心命令rsync -av --files-from=$file / root@$host:/
rsync -av --files-from=文件名 / 用户名@目标ip:/
rsync.sh
代码:
#!/bin/bash
for ip in `cat /usr/local/shell/ip.list`
do
echo $ip
./rsync.expect $ip /usr/local/shell/list.txt
done
说明:
做一个循环,循环为ip个数,也就是必须创建一个ip.list的文件,里面写上目标ip
每循环一次,输出当前ip,执行expect 脚本。指定脚本参数为ip 和文件列表中的信息
vim /usr/local/shell/ip.list
192.168.188.3
192.168.188.4
vim /usr/local/shell/list.txt
/tmp/1.txt
/tmp/2.txt
chmod a+x /usr/local/shell/rsync.sh
chmod a+x /usr/local/shell/rsync.expect
sh /usr/local/shell/rsync.sh
检查192.168.188.3 与192.1688.188.4的/tmp目录是否同步上1.txt和2.txt
注意:对应主机都必须安装rsync包
exe.expect
代码:
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
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 /usr/local/shell/ip.list`
do
./exe.expect $ip "hostname"
done
说明:
其中./exe.expect 是运行当前目录的exe.expect脚本,并附带两个参数;其中hostname为命令;
vim /usr/local/shell/ip.list
192.168.188.3
192.168.188.4
chmod a+x exe.expect
chmod a+x exe.sh
sh exe.sh
也可以使用sh -x exe.sh 查看shell运行的详细步骤;
标签:shell expect 分发系统 批量同步文件 批量执行命令
原文地址:http://blog.51cto.com/shuzonglu/2108379