文档章节

Linux-Shell交互式自动化运维程序

l
 linux-tao
发布于 05/02 22:06
字数 1527
阅读 37
收藏 4

ExpectLinux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会提示找不到命令,需要手动安装,其它安装也比较简单,可以通过二进制源码包编译配置进行安装,也可以通过网络借助yum源来安装,yum源安装比较简单;我们下面借助Expect库来实现Linux交互式自动化运维操作,只需要执行脚本就可以实现自动化运维操作,不需要手动输入一些信息按确定,我们可以将交互过程写在一个脚本上,使之自动化完成。我们可以通过expect实现ssh自动登录、ftp自动登录、自动传输文件、自动创建和删除用户等都符合交互式自动化运维。下面我们会通过一些案例来展现结果,我们通过以下几个命令来介绍四个基础命令。

Linux在企业中应用还是比较广泛,而且expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect是不断的更新,随着时间的流逝,其功能越来越强大,对Linux有基本的了解都知道这个命令,而且是Linux操作系统管理员必不可少的一个命令,常用的shell脚本都需要用到这个工具,可以省去运维大量的操作时间,有利于提高工作效率,如果对Linux不太了解的可以去购物平台去搜刘遄老师的《Linux就该这么学》这本书学习,书籍内容比较适合初学者,也有好多案例比较适合企业常用的一些操作,expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。

我们通过yum源来简单的介绍下expect需要安装哪几个库,如果要通过二进制tar.gz包安装也可以,需要去下载expect.tar.gz安装包,这里就不介绍了,操作如下:

# yum install expect.x86_64 expect-devel.x86_64 -y

下面详细的解释四个基础命定,expect中最关键的四个命令是:send,expect,spawn,interact。

1、send:用于向进程发送字符串;

2、expect:从进程接收字符串;

3、spawn:启动新的进程;

4、interact:允许用户交互;

 

1. send命令

send命令接收一个字符串的参数,并且将该参数发送到进程。

[root@zbox ~]# expect

expect1.1> send "hello world\n"

hello world

expect1.2>

 

2. expect命令

expect命令和send命令执行的结果正好相反,expect是用来等待一个进程的反馈消息,expect可以接收一个字符串参数,也可以接收正则表达式参数,一般都是与send命令结合使用才能看到明细的效果,下面我们可以用一个最简单的交互式的案例来展示效果:

expect "hi\n"

send "hello there!\n"

上面两行代码的意思是:从标准输入中等到hi和换行键后,向标准输出输出hello there。

 

Expect还有一种最常用的语法是来自tcl语言的模式-动作,这种语法在shell中应用极其灵活,使用也非常方便,下面我们就各种语法用案例来说明

expect "hello" {send " hello "}

 

3. spawn命令

上面的所有案例都是和标准输入输出进行交互,但是我们更希望他可以和某一个进程进行交互。spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的。结合上面的send和expect命令我们可以实现一个更复杂点的shell程序。

# vim test.sh

set timeout -1                          //设置永不超时;

spawn ssh -p 22 root@192.168.3.9       //开启新的进程ID,该进程的用户连接远程ssh服务器;

expect "*Password"                                 //进程返回Password时;

send "password\r"                     //向进程输入password\r,这里是输入是root用户的密码

 

 

下面是测试脚本的结果:

 

这段代码的作用是实现登录到ssh服务器192.168.3.9的root账号上,这段shell代码中用到interact,下面我们就来详细的介绍这个命定;

 

4.interact

到现在为止,我们已经可以结合spawn、expect、send自动化的完成很多任务了。但是,如何让人在适当的时候干预这个过程了。比如ssh登录到服务器上面要执行什么操作,仍然可以停留在ssh服务器登录状态,以便手动的执行后续命令。interact可以达到这些目的。下面的案例是在自动登录ssh服务器后,允许用户交互操作。

#!/usr/bin/expect

spawn ssh root@192.168.3.9

expect "*password:"

send "password\r"

spawn sleep 10

interact

exit

这个案例其实和上面这个差不多,但是这个多了一个自动退出功能,设置登录成功10s后自动退出。

 

Expect在shell中也是一个比较复杂的库,如果想深入的了解,自己也要多结合理论和实践操作一起进行,这样学习起来还是比较快的,还可以通过shell实现简单的控制功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如ssh服务器等进行交互的功能,而expect就使用来实现这种功能的工具,希望本文章会给大家有所帮助。

© 著作权归作者所有

l
粉丝 20
博文 1008
码字总数 1130720
作品 0
深圳
运维
私信 提问
Linux Shell交互式自动化运维程序

Expect是Linux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会提示找不到命令,需要手动安装,其它安装也比较简单,可以通过二进制源码包编译配置进行安装...

xiangyunyan
05/02
33
0
Python在DevOps中的应用

互联网时代,只有能够快速试验新想法,并在第一时间,安全、可靠的交付业务价值,才能保持竞争力。DevOps推崇的自动化构建/测试/部署,以及系统度量等技术实践,是互联网时代必不可少的。 大...

抚琴煮酒
2018/08/10
0
0
OSC 第 126 期高手问答 -- Linux 集群和自动化运维

OSCHINA 本期高手问答(9月7日- 9月14日) 我们请来了@抚琴煮酒(余洪春)为大家解答关于Linux集群和自动化运维的问题。 @抚琴煮酒 (余洪春),高级运维架构师、资深运维工程师,在电子商务领...

局长
2016/09/07
5.4K
53
Linux运维每日都在做什么工作?Linux运维学习

  Linux系统在互联网公司应用越来越多,也有不少的朋友愿意加入运维的行列中,那么,运维每天都做什么工作呢?   运维人员做事需遵循“简单、易用、高效”的原则。对于运维服务有3大宗旨:...

老男孩Linux培训
2018/06/04
30
0
linux学习路线和运维成长之路

最近看到了一篇新闻,linux之父建议找一份基于linux和开源环境的工作,确实,这已经是未来的大趋势了。今天就来聊一聊我的想法,本人8年linux运维一线经验,呆过很多互联网公司,从一线运维做...

神的信仰
2016/05/17
25
0

没有更多内容

加载失败,请刷新页面

加载更多

相册管理

相册管理 相册管理 一、相册管理:指对所有上传的图片的归类管理。 1、创建相册:可以新建多个相册。 2、上传图片:可以上传图片到相册里。 3、搜索:输入相册名称对相册的搜索。 二、点击相...

Geek-Chic
33分钟前
5
0
pymongo和mongoengine安装和使用教程 包含常用命令行和代码示例

本文首发于个人博客https://kezunlin.me/post/e88f04e5/,欢迎阅读最新内容! pymongo and mongoengine tutorial on ubuntu 16.04 Guide version mongo 2.6.10 mongo gui: robo3t-1.3.1 pymo......

kezunlin
54分钟前
7
0
潜水一周,我精心整理了两个超级有用的职场生存之道

最近一周过的很充实,所以都没爬上来和大家 好好聊聊,原本计划的很多事情也没有下文,因为略忙,有点不可开交。需求和线上的问题常常困扰了我,或许这就是还需要提升的关键吧。 但是,好在还...

Dimple91
今天
6
0
大规模机器集群-故障自动处理(二)

本篇开始介绍具体的实现过程,为表述方便,先定义一些名词, _AutoRepairSystem: _故障自动维修系统, 缩写为ARS 原子操作:任务的最小操作,机器任务通常是指重启、重装 运维人员:运维工程师...

曲行人
今天
6
0
使用Supervisor管理任务

安装:yum install supervisor 修改配置文件:vi /etc/supervisord.conf [unix_http_server]file=/var/run/supervisor.sock ; UNIX socket 文件,supervisorctl 会使用;chmod=0700 ......

FalconChen
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部