文档章节

Shell编程(expect同步文件、指定host和同步文件、构建文件分发系统、批量执行命令)

蛋黄_Yolks
 蛋黄_Yolks
发布于 09/26 00:25
字数 1348
阅读 18
收藏 2

expect脚本同步文件

需求:自动同步文件 实验准备:

  • A机器:192.168.248.130
  • B机器:192.168.248.129 实现:

1.A机器编写4.expect脚本文件,内容如下所示:

#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}

expect eof #至关重要的一步设置,如果不加这条语句,那么还没有开始执行数据传输,就马上结束了,甚至有可能还没有远程登录成功,就已经退出来了,所以脚本里面必须要加这条语句。

2.执行权限

chmod a+x 4.expect

3.执行脚本

[root@yolks3 ~]# ./4.expect 
spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/
couldn't execute "rsync": no such file or directory
    while executing
"spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/"
    (file "./4.expect" line 3)

报错了,神奇的海螺。查询报错:couldn't execute "rsync",使用yum安装

yum -y install rsync

再次执行:已经ok,可以查看文件和大小

[root@yolks3 ~]# ./4.expect 
spawn rsync -av root@192.168.248.129:/tmp/12.txt /tmp/
root@192.168.248.129's password: 
receiving incremental file list
12.txt

sent 43 bytes  received 97 bytes  280.00 bytes/sec
total size is 5  speedup is 0.04
[root@yolks3 ~]# cat /tmp/12.txt 
1212
[root@yolks3 ~]# ls -lh /tmp/12.txt 
-rw-r--r-- 1 root root 5 9月  24 21:10 /tmp/12.txt

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

之前的3.expect文件默认是10秒钟超时,当然也是可以增加超时时间甚至可以让永久不超时。

只需要在脚本文件中添加第3行set timeout语句即可

expect "]*"
send "$cm\r"
set timeout 3  设置超时秒数,如果是-1表示永久不会超时
expect "]*"
send "exit\r"

需求:参数指定host和要同步的文件,这种方式只适合同步一个文件。 实现:

1.编写脚本5.expect文件,脚本内容如下所示:

#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0] #第一个变量是主机host(也就是主机IP地址)
set file [lindex $argv 1] #第二个变量是要同步的文件
spawn rsync -av $file root@$host:$file #这里是从本机到对方,而且file要写绝对路径。
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

2.执行权限

chmod a+x 5.expect

3.执行

[root@yolks3 ~]# ./5.expect 192.168.248.129 "/tmp/12.txt"
spawn rsync -av /tmp/12.txt root@192.168.248.129:/tmp/12.txt
root@192.168.248.129's password: 
sending incremental file list

sent 45 bytes  received 12 bytes  114.00 bytes/sec
total size is 5  speedup is 0.09

构建文件分发系统

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

实现思路:首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。
核心命令:rsync -av --files-from=list.txt / root@host:/
实现:

1.编写 rsync.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:/ #如果不确定对方机器有相同的路径,可以加-avR
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

2.编写文件列表 /tmp/file.list,内容如下:

/tmp/12.txt
/tmp/yolks.file

3.编写IP地址列表文件 /tmp/ip.list

192.168.248.129
192.168.248.130

4.创建 rsync.sh shell文件

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

5.执行rsync.sh

1)执行权限

[root@yolks3 ~]# chmod a+x rsync.expect

2)执行shell脚本:rsync.sh

[root@yolks3 ~]# sh -x rsync.sh
++ cat /tmp/ip.list
+ for ip in '`cat /tmp/ip.list`'
+ ./rsync.expect 192.168.248.130 /tmp/file.list
spawn rsync -avR --files-from=/tmp/file.list / root@192.168.248.130:/
root@192.168.248.130's password: 
building file list ... done

sent 95 bytes  received 12 bytes  214.00 bytes/sec
total size is 5  speedup is 0.05
+ for ip in '`cat /tmp/ip.list`'
+ ./rsync.expect 192.168.248.129 /tmp/file.list
spawn rsync -avR --files-from=/tmp/file.list / root@192.168.248.129:/
root@192.168.248.129's password: 
building file list ... done
tmp/
tmp/yolks.file

sent 137 bytes  received 38 bytes  350.00 bytes/sec
total size is 5  speedup is 0.03

在192.168.248.129机器上,可以查看到刚才远程同步的2个文件。

[root@yolks2 ~]# ls -lt /tmp/12.txt /tmp/yolks.file 
-rw-r--r-- 1 root root 0 9月  26 00:15 /tmp/yolks.file
-rw-r--r-- 1 root root 5 9月  24 21:10 /tmp/12.txt

批量远程执行命令

想批量远程执行命令,可以通过2个脚本来实现。

1.创建 exe.expect 脚本

#!/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"

2.添加执行权限

[root@yolks3 ~]# chmod a+x exe.expect

3.创建 exe.sh shell脚本

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

4.执行

[root@yolks3 ~]# sh -x exe.sh 
++ cat /tmp/ip.list
+ for ip in '`cat /tmp/ip.list`'
+ ./exe.expect 192.168.248.130 hostname
spawn ssh root@192.168.248.130
root@192.168.248.130's password: 
Last failed login: Wed Sep 26 00:11:24 CST 2018 from 192.168.248.130 on ssh:notty
There were 5 failed login attempts since the last successful login.
Last login: Tue Sep 25 22:42:14 2018 from 192.168.248.1
[root@yolks3 ~]# hostname
yolks3
[root@yolks3 ~]# + for ip in '`cat /tmp/ip.list`'
+ ./exe.expect 192.168.248.129 hostname
spawn ssh root@192.168.248.129
root@192.168.248.129's password: 
Last failed login: Wed Sep 26 00:11:34 CST 2018 from 192.168.248.130 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Tue Sep 25 22:42:17 2018 from 192.168.248.1
[root@yolks2 ~]# hostname
yolks2
[root@yolks2 ~]# [root@yolks3 ~]# 

扩展

shell多线程 http://blog.lishiming.net/?p=448

© 著作权归作者所有

蛋黄_Yolks
粉丝 9
博文 100
码字总数 112269
作品 0
通州
私信 提问
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
10/30
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
expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统

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

Zhouliang6
07/21
0
0
linux复盘:expect构建文件分发系统

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

历经35天的选择
02/10
13
0

没有更多内容

加载失败,请刷新页面

加载更多

NEO 节点介绍

全节点(full nodes)是存储 NEO 区块链全部数据的节点,通过 P2P 的方式与区块链网络连接,在区块链网络中,所有的全节点都是平等的,既充当客户端又充当服务器。 NEO 有两个全节点程序: ...

NEO-FANS
3分钟前
0
0
内网穿透大杀器--EarthWorm

0x00 前言 如果感觉本文对你有帮助,请在文章末尾点个赞,谢谢表哥们支持! 当你在内网渗透,并且拿下一台机器的权限时,你是不是觉得已经算是一次完整的渗透了? 不来一次内网漫游,渗透是不...

刀剑如梦
8分钟前
0
0
PiggyMetrics分布式框架

https://github.com/sqshq/PiggyMetrics

丁建祥
10分钟前
0
0
零距离接触阿里云时序时空数据库TSDB

概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增。 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空...

阿里云云栖社区
18分钟前
0
0
OkHttpClient封装

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; import java.util.Map.Entry; import o......

尘叙缘
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部