20.31 expect脚本同步文件
#!/usr/bin/expect
set passwd "liang.123"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/ 将远程的/tmp/12.txt同步到本地的机器上
expect {
"yes/no" { send "yes\r"} 第一次会提示yes或no
"password:" { send "$passwd\r" }
}
expect eof
加执行权限,再执脚本文件
查看本机是否有同步过来的文件
如果将脚本expect eof注释掉
再执行文件,刚登陆就退出来了,还没来的及传输
20.32 expect脚本指定host和要同步的文件
vi /5.expect 这个脚本是由本同步到远程
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file [email protected]$host:$file 第一个参数指定IP 第二个参数指定文件
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
执行5.expect时要输入第一个参数IP和第二个参数要同步文件的路径
20.33 构建文件分发系统
vi rsync.expect
内容
#!/usr/bin/expect
set passwd "liang.123"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av --files-from=$file / [email protected]$host:/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
在/tmp目录下创建list.txt,这个文件内容就是要同步的文件路径
vi /tmp/list.txt
要想同步的这3个文件,前提是要对方的机器也要同时存在一样的路径,如果不能确定对方机器也存在一样的路径,那可以在rsync.expect方件里加一个R,当对方机器不存在相同路径时会自动创建路径
因为远程同步的机器可能不只一台,所有也要创建一个IP列表
vi /tmp/ip.list
在执行脚本前要保证两台机器的密码是一样的
下面来继续创建rsync.sh
vi /rsync.sh
#!/bin/bash
for ip in cat /tmp/ ip.list
do
echo $ip
./rsync.expect $ip /tmp/file.list
done
在执行之前还要给 rsync.expect一个执行的权限
chmod a+x rsync.expect
192.168.137.130同步是没有问题的,但有一个提示
/root/shell/1.sh" failed: No such file or directory这个1.sh是不存在的
127.0.0.0是有问题的,提示密码错误
但这种操作方法是没有问题的
查看一下192.168.137.130机器上是否同步了文件
20.34批量远程执行命令
cd /usr/local/sbin
vi exe.expect
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "liang.123"
set cm [lindex $argv 1] cm为第二个参数,cm是要执行的命令
spawn ssh [email protected]$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]"
send "$cm\r"
expect "]"
send "exit\r"
加执行的权限
chmod a+x exe.expect
再去定义一个exe.sh脚本
vi exe.sh
#!/bin/bash
for ip in cat /tmp/ip.list
do
echo $ip
./exe.expect $ip "hostname"
done
在2台机器上执行命令成功
原文地址:http://blog.51cto.com/13450039/2108344