Linux 批量一键部署工具 Expect

既然没有遇到过,做好准备总是好的。这是自己送给自己的话,现在运维做自动话越来越多,自己就学以下,记录笔记。目前主流的有puppet、Expect、pssh等等,今天就用Expect做自动部署和日常管理维护。

一、Expect简介

expect是一种能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序。根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及什么是正确的应答。它是一种可以提供“分支和嵌套结构”来引导程序流程的解释型脚本语言。

我们熟知的shell编程功能虽然很强大,但是不能实现有交互功能的多机器之前的操作,例如ssh和scp等。而expect可以帮助我们来实现。

二、安装

[root@Server ~]# yum -y install expect

三、Expect使用

这里使用Expect批量管理和部署服务器大致分为两个步骤,使用for循环读取服务器IP、密码列表并取值,远程执行命令。如下需求,在两台服务器上执行自己命令mkdir /tmp/`date +%Y%m%d`,看下面实现方法。

首先定义一个expect登录脚本:

1、login.exp,内容如下:

[root@Server ~]# vi /data/sh/login.exp

#!/usr/bin/expect -f

set ip [lindex $argv 0 ]#读取ip

set passwd [lindex $argv 1 ]#读取密码

set command [lindex $argv 2]#命令

set timeout 10#登录后下次执行命令间隔

spawn ssh root@$ip#spawn   意思是执行命令,expect内命令,shell中不存在

expect {

"yes/no" { send "yes\r";exp_continue }#选择yes

"password:" { send "$passwd\r" }#读取

}

expect "*#*" { send "$command\r" }#执行命令

expect eof

2、创建批量执行脚本auto_exec.sh

[root@Server ~]# vi auto_exec.sh

#!/bin/sh

CMD="$*"

for i in `awk '{print $1}' passwd.txt`#fou循环读取ip

do

j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`#密码

expect /data/sh/login.exp $i $j "$CMD"#执行

done

3、建立批量IP、密码文件

[root@Server ~]# vi passwd.txt

192.168.17.135 123456

192.168.17.128 123456

192.168.17.136 123456

四、测试脚本

直接执行:

[root@Server ~]# /bin/sh auto_exec.sh "mkdir -p /tmp/`date +%Y%m%d`"

登录三台服务器在/tmp下有日期文件

五、SCP远程拷贝

如果需要远程推送文件,重新建立文件login.scp相关参数和auto_exec.sh变量:

1、login.scp内容如下:

[root@Server ~]# vi login.scp

#!/usr/bin/expect -f

set ip [lindex $argv 0 ]

set passwd [lindex $argv 1 ]

set src_file [lindex $argv 2]

set des_dir [lindex $argv 3]

set timeout 1

spawn scp -r $src_file root@$ip:$des_dir

expect {

"yes/no" { send "yes\r";exp_continue }

"password:" { send "$passwd\r" }

}

expect "#*"

expect eof

2、auto_exec.sh脚本内容如下:

[root@Server ~]# vi auto_exec.sh

#!/bin/sh

read -p "Please Enter insert Source File or DIR: " src_file

echo ======================================================

sleep 1

read -p "Please Enter insert Destination DIR: " des_dir

for i in `awk '{print $1}' passwd.txt`

do

j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`

expect login.scp $i $j $src_file $des_dir

done

密码保持不变即可。

[root@Server ~]# /bin/sh auto_exec.sh

Please Enter insert Source File or DIR: login.scp#本地文件

======================================================

Please Enter insert Destination DIR: /home

spawn scp -r login.scp root@192.168.17.135:/home#发送到客户端的文件

六、一键安装expect、scp批量auto_exec.sh脚本:

#!/bin/sh

if

[ ! -e /usr/bin/expect ];then

yum install expect -y

fi

#Judge passwd.txt exist

if

[ ! -e ./passwd.txt ];then

echo -e "The passwd.txt is not exist......Please touch ./passwd.txt ,Content Example:\n192.168.1.11 passwd1\n192.168.1.12 passwd2"

sleep 2 &&exit 0

fi

#Auto Tuoch login.exp File

cat >login.exp <

就是以上几个脚本的合成。

以下是expect用法

1. [#!/usr/bin/expect]

这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。

注意:这一行需要在脚本的第一行。

2. [set timeout 30]

基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒 。timeout -1 为永不超时

3. [spawn ssh -l username 192.168.1.1]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。

它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

4. [expect "password:"]

这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

5. [send "ispass\r"]

这里就是执行交互动作,与手工输入密码的动作等效。

温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。

6. [interact]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

7.$argv 参数数组

expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数

linux批量部署war工具,Linux 批量一键部署工具 Expect相关推荐

  1. 腾讯android一键root工具,腾讯一键Root工具pc版下载_腾讯一键Root工具pc版官方下载-太平洋下载中心...

    常见问答: 1.腾讯一键root工具如何卸载? 答:1.一键root时要自动安装授权管理,如果不ROOT了,想卸载"授权管理"的话,直接卸载会提示"系统软件无法卸载&qu ...

  2. 【产品设计】批量上传:别让一键高效工具成为“导入失败”的警报器

    批量导入是在基础数据录入很常见的一个功能,即可以节省逐条新增的人力成本,又可以避免数据重复录入的问题,一举多得:但是模板处理不当,导入过程中不同报错导入失败,会让用户烦躁不安. 一.明确的导入操作指引 ...

  3. 当当elastic-job docker快速部署_[小Z课堂]-docker 快速部署 elasticsearch 和 kibana,一键部署...

    各位小伙伴,小Z课堂来袭,每天只需看三分钟,你就能用docker 快速部署各种环境.今天就用docker 来部署 elasticsearch 和 kibana.docker的入门请上度娘学习,这里直接 ...

  4. 2022绿色小工具-工程电脑一键优化工具-By.Win10_x64

    =======By.SOLDIER_工程电脑优化工具======    A.调整用户账号UAC为最高级别  B.启用内置管理员账户的管理员模式  C.关机时强制杀后台程序,关机或重启无延时  D.关闭 ...

  5. 一键部署工具easy-jenkins,界面友好,操作简单

    文章目录 前言 一.项目地址 二.使用步骤 1.项目结构 2.启动主类 EasyJenkinsApplication 3.安装 4.项目启动图 三.功能点介绍 1.部署列表 1.添加连接(部署jar) ...

  6. lnmp一键部署脚本

    LNMP一键部署脚本 LNMP代表的是:linux系统下 nginx+mysql+php 网站服务器架构 一键部署的意思是,执行脚本,解决所有依赖关系,没有报错.脚本执行完成,环境部署完成 所以在做一 ...

  7. LNMP架构搭建和一键部署LNMP

    文章目录 一.LNMP工作原理 1.LNMP工作原理 2.LAMP工作原理 3.LAMP和LNMP的区别 二.LNMP部署 1.安装nginx服务 1.1 安装nginx的依赖包 1.2 创建ngin ...

  8. 华为云服务器上部署war包(虚拟机也同样适用)

    目录 linux部署war包 安装jdk 关闭防火墙 简单粗暴(推荐虚拟机使用) 复杂但安全(推荐服务器使用) 安装tomcat 部署war包 linux部署war包 安装jdk 执行命令查看可安装j ...

  9. linux宝塔搭建网站,宝塔Linux面板搭建网站入门教程五(宝塔Linux面板安装WordPress博客程序)...

    本文于 2021-04-01 00:04 更新,本文內容具有時效性,如有失效,請在博客站內搜相關商家名稱,即可查看到關於此商家的最新優惠活動! 國外商家建議使用"谷歌瀏覽器"訪問, ...

  10. 使用Helm 在容器服务k8s集群一键部署wordpress

    摘要: Helm 是啥? 微服务和容器化给复杂应用部署与管理带来了极大的挑战.Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Ku ...

最新文章

  1. 区块链BaaS云服务(28)TOP Network 之全分片主链(Layer-1)
  2. 【前端分享】jQuery.lazyload详解(转)
  3. 王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结
  4. 实用垃圾收集,第1部分–简介
  5. python用http协议传数据_python基础 -- 简单实现HTTP协议
  6. 微信公众号开发--微信JS-SDK扫一扫功能
  7. Spring Cloud服务网关 Zuul
  8. 在线CSS代码压缩美化工具
  9. 读史知今、以史为鉴 【技术商业化】
  10. Python之print语句
  11. LFW人脸数据库的简介
  12. 普通正态分布如何转换到标准正态分布
  13. VS2008简体中文版下载及安装破解
  14. python画小树_如何用Python画一颗小树?
  15. 栈帧详解ebp、esp
  16. 最多只需三步,彻底解决VB6中不能加载MSCOMCTL.OCX的提示
  17. 银行贷款客户拉新活动分析——数据分析项目实战
  18. RK 7.1 OTA升级提示Not enough free space on /cache to apply patches
  19. 《绝地求生》玩家排名预--1.介绍
  20. discuz论坛出现“请求来路不明”提示的解决方法

热门文章

  1. android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现
  2. 加了密的PDF如何破解复制?
  3. Typora markdown公式换行等号对齐_Typora编写博客格式化文档的最佳软件
  4. android获取短信息,从其ID Android获取短信详细信息
  5. php strip_tags 少,详解PHP函数 strip_tags的用法不足之处
  6. ctype函数_PHP ctype_xdigit()函数与示例
  7. aptitude 命令_C-命令行参数Aptitude问题与解答
  8. can收发器 rx_CANOpen系列教程03 _CAN收发器功能、原理及作用
  9. nginx加载图片慢_优化vue项目的首屏加载速度
  10. c ++向量库_将向量复制到C ++中的另一个向量