分发系统-批量同步

将指定文件传送到多个ip的相同目录下

创建expec脚本

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:/

创建shell脚本

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 和文件列表中的信息

创建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包


分发系统-批量执行命令

创建expect脚本

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"

创建shell脚本

exe.sh
代码:


#!/bin/bash
for ip in `cat /usr/local/shell/ip.list`
do
     ./exe.expect $ip "hostname"
done

说明:

其中./exe.expect 是运行当前目录的exe.expect脚本,并附带两个参数;其中hostname为命令;

创建ip列表

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运行的详细步骤;