本文共 1534 字,大约阅读时间需要 5 分钟。
将指定文件传送到多个ip的相同目录下
rsync.expect
代码:#!/usr/bin/expectset 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/bashfor ip in `cat /usr/local/shell/ip.list`do echo $ip ./rsync.expect $ip /usr/local/shell/list.txtdone
说明:
做一个循环,循环为ip个数,也就是必须创建一个ip.list的文件,里面写上目标ip每循环一次,输出当前ip,执行expect 脚本。指定脚本参数为ip 和文件列表中的信息vim /usr/local/shell/ip.list192.168.188.3192.168.188.4
vim /usr/local/shell/list.txt/tmp/1.txt/tmp/2.txt
chmod a+x /usr/local/shell/rsync.shchmod a+x /usr/local/shell/rsync.expectsh /usr/local/shell/rsync.sh
检查192.168.188.3 与192.1688.188.4的/tmp目录是否同步上1.txt和2.txt注意:对应主机都必须安装rsync包
exe.expect
代码:#!/usr/bin/expectset passwd "123456"set host [lindex $argv 0]set cm [lindex $argv 1]spawn ssh root@$hostexpect {"yes/no" { send "yes\r"}"password:" { send "$passwd\r"}}expect "]*"send "$cm\r"expect "]*"send "exit\r"
exe.sh
代码:#!/bin/bashfor ip in `cat /usr/local/shell/ip.list`do ./exe.expect $ip "hostname"done
说明:
其中./exe.expect 是运行当前目录的exe.expect脚本,并附带两个参数;其中hostname为命令;
vim /usr/local/shell/ip.list192.168.188.3192.168.188.4
chmod a+x exe.expectchmod a+x exe.shsh exe.sh
也可以使用sh -x exe.sh 查看shell运行的详细步骤;
转载于:https://blog.51cto.com/shuzonglu/2108379