文档章节

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

影夜Linux
 影夜Linux
发布于 07/21 00:55
字数 1482
阅读 8
收藏 0

20.31 expect脚本同步文件

expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上

编写脚本

[root@linux-5 ~]# cd /usr/local/sbin
[root@linux-5 sbin]# vim 4.expect
#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.88.10:/root/1.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

注:expect eof的作用,可以为spwan所执行的命令提供足够的时间执行,不会马上退出expect,从而导致命令尚未执行完毕而退出的情况(尤其是文件传输的命令);interact的作用可以使远程登录后保留登录状态

脚本授权

[root@linux-5 sbin]# chmod a+x !$
chmod a+x ./4.expect

执行脚本

[root@linux-5 sbin]# ./4.expect 
spawn rsync -av root@192.168.88.10:/root/1.txt /tmp/
receiving incremental file list
1.txt

sent 43 bytes  received 96 bytes  278.00 bytes/sec
total size is 6  speedup is 0.04
expect: spawn id exp6 not open
    while executing
"expect eof"
    (file "./4.expect" line 8)

结果验证

[root@linux-5 sbin]# cat /tmp/1.txt
12345

20.32 expect脚本指定host和要同步的文件

通过带参数的方式为指定的地址同步指定的文件

编写脚本

#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]   #第一个参数
set file [lindex $argv 1]   #第二个参数
spawn rsync -av $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

脚本授权

[root@linux-5 sbin]# chmod a+x 5.expect

执行脚本

[root@linux-5 sbin]# ./5.expect 192.168.88.10 /tmp/1.txt 
spawn rsync -av /tmp/1.txt root@192.168.88.10:/tmp/1.txt
sending incremental file list
1.txt

sent 96 bytes  received 35 bytes  262.00 bytes/sec
total size is 6  speedup is 0.05
expect: spawn id exp6 not open
    while executing
"expect eof"
    (file "./5.expect" line 10)

结果验证

[root@linux-10 ~]# cat /tmp/1.txt 
12345

20.33 构建文件分发系统

需求背景

对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。

实现思路

首先要有一台模板机器,把要分发的文件准备好,编写两个脚本,一个expect文件分发脚本,一个IP遍历脚本,将分发脚本嵌套在IP遍历脚本中,用IP遍历脚本为文件分发脚本提供IP参数以及需要同步的文件目录,再使用expect文件分发脚本批量把需要同步的文件分发到目标机器即可实现。

核心命令

rsync -av --files-from=list.txt / root@host:/

使用rsync 的 --files参数,可以实现调用文件里面的列表,进行多个文件远程传输,进而实现文件分发

构建文件分发系统

编写expect文件分发脚本

#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -avR --files-from=$file / root@$host:/   ##定义了原目录和目标目录以根目录开始
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

同步的路径,需要保证对方机器也有这个相同的路径,如果没有路径,需要使用 -R 选项创建路径

编写IP遍历脚本

#!/bin/bash 
for ip in `cat /tmp/ip.list`
do
    echo $ip   
    ./rsync.expect $ip /tmp/file.list
done

创建需要同步的文件的列表文件

vim /tmp/file.list
##将需要同步的文件的绝对路径写入列表文件中
/usr/local/sbin/1.sh
/usr/local/sbin/2.sh
/usr/local/sbin/3.sh
/root/23.txt

创建需要同步的IP地址的列表文件

vim /tmp/ip.list
192.168.88.10

脚本授权

[root@linux-5 sbin]# chmod a+x rsync.expect
[root@linux-5 sbin]# chmod a+x rsync.sh

脚本测试

[root@linux-5 sbin]# sh -x rsync.sh
++ cat /tmp/ip.list
+ for ip in '`cat /tmp/ip.list`'
+ echo 192.168.88.10
192.168.88.10
+ ./rsync.expect 192.168.88.10 /tmp/file.list
spawn rsync -avR --files-from=/tmp/file.list / root@192.168.88.10:/
building file list ... done
root/
root/23.txt
usr/local/
usr/local/sbin/
usr/local/sbin/01.sh
usr/local/sbin/02.sh
usr/local/sbin/03.sh

sent 647 bytes  received 101 bytes  1,496.00 bytes/sec
total size is 271  speedup is 0.36
expect: spawn id exp6 not open
    while executing
"expect eof"
    (file "./rsync.expect" line 10)

注:分发系统还有一个重要的关键是,确保同步的机器的密码一致,否则将不能实现同步;所以这就存在一个弊端,一旦脚本暴露,将会让别人知道如何登陆你机器;当然也有对应的解决办法,那就是使用密钥认证,这样的话,自然在命令行业省去“输入密码< password:" { send "$passwd\r" } >''”和“定义密码< set passwd "123456" >”的命令了

20.34 批量远程执行命令

实现原理

与批量分发类似,需要将远程执行命令脚本嵌套在IP遍历脚本中,由IP遍历脚本为远程执行命令脚本传递IP的参数和所需要执行的具体命令的参数。

编写远程执行命令脚本

vim exe.except
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "123456"
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"

编写IP遍历脚本

vim exe.sh
##利用for循环遍历IP,传递给远程脚本相应参数,并在循环中执行远程脚本
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
   ./exe.except $ip "w;ls"
done

脚本授权

[root@linux-5 sbin]# chmod a+x exe.except
[root@linux-5 sbin]# chmod a+x exe.sh

脚本测试

[root@linux-5 sbin]# sh -x exe.sh
++ cat /tmp/ip.list
+ for ip in '`cat /tmp/ip.list`'
+ ./exe.except 192.168.88.10 'w;ls'
spawn ssh root@192.168.88.10
Last login: Sat Jul 21 16:37:14 2018 from 192.168.88.5
[root@linux-10 ~]# w;ls
 16:45:52 up  2:18,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.88.1     15:47   52:08   0.00s  0.00s -bash
root     pts/1    192.168.88.5     16:45    0.00s  0.00s  0.00s w
1.txt  23.txt  anaconda-ks.cfg  zabbix-release-3.2-1.el7.noarch.rpm

 

© 著作权归作者所有

共有 人打赏支持
影夜Linux
粉丝 3
博文 76
码字总数 127166
作品 0
杭州
运维
加载中

评论(1)

沉迷于编程的小菜菜
沉迷于编程的小菜菜
挺多的嘞
20.31 expect脚本同步文件;20.32 expect脚本指定host和要同步的文件;

20.31 expect脚本同步文件;20.32 expect脚本指定host和要同步的文件;20.33 构建文件分发系统;20.34 批量远程执行命令 20.31 expect脚本同步文件 自动同步文件 1. 同步远程机器hao2上/tmp/...

主内安详
05/03
0
0
2018-4-27 18周2次课 分发系统-expect讲解(下)

20.31 expect脚本同步文件 ·自动同步文件 [root@localhost sbin]# chmod a+x 4.expect[root@localhost sbin]# ./4.expectspawn rsync -av root@192.168.65.129:/tmp/12.txt /tmp/root@192.......

alexis7gunner
04/26
0
0
linux复盘:expect构建文件分发系统

需求:开发人员开发的代码发布到线上环境中(其实后面用到jenkins才是真正的98k) expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同...

历经35天的选择
02/10
13
0
expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统

expect脚本同步文件 更改权限 执行脚本 查看执行结果 expect eof需要加上,作用是等脚本命令执行完再进行退出 expect脚本指定host和要同步的文件 更改权限,执行脚本 构建文件分发系统 需求背...

Zhouliang6
07/21
0
0
20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令

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

夜归人8421
04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

防止快速重复点击的两种思维

防止重复执行的两种思维 场景 下单时,提交按钮,因为网络卡顿或者手快重复点击,导致重复提交订单; 微博,更新个人状态或发表评论时,快速多次点击[发送]按钮,导致相同的信息发送多次. 解决思路 ...

黄威
21分钟前
0
0
在windows环境下使用Virtualbox虚拟Debian系统来运行Docker

标题绕口。 我之前一直使用 Virtualbox 和 homestead 来运行我的 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操作失误和环境不兼容等问题造成的各种损失。就打...

zgldh
23分钟前
0
0
python map()

map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。(利用生成器的原理,并不马上返回值,...

南桥北木
37分钟前
0
0
分享几个 SpringBoot 实用的小技巧

前言 最近分享的一些源码、框架设计的东西。我发现大家热情不是特别高,想想大多数应该还是正儿八经写代码的居多;这次就分享一点接地气的: SpringBoot 使用中的一些小技巧。 算不上多高大上...

Java干货分享
37分钟前
1
0
day123-20181021-英语流利阅读-待学习

这款新字体,比记忆面包还管用 Lala 2018-10-21 1.今日导读 字体能跟学习效果有什么关系?你还别说,来自澳洲的心理学家和设计师们,还真创造了一款号称能够帮助大家记忆信息、增强学习效果的...

飞鱼说编程
49分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部