码迷,mamicode.com
首页 > 其他好文 > 详细

expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

时间:2018-04-26 23:39:30      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:十八周二次课(4月26日)

20.31 expect脚本同步文件
技术分享图片
#!/usr/bin/expect
set passwd "liang.123"
spawn rsync -av root@192.168.137.130:/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 root@$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 / root@$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 root@$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台机器上执行命令成功
技术分享图片

expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

标签:十八周二次课(4月26日)

原文地址:http://blog.51cto.com/13450039/2108344

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!