linux批量部署war工具,Linux 批量一键部署工具 Expect
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相关推荐
- 腾讯android一键root工具,腾讯一键Root工具pc版下载_腾讯一键Root工具pc版官方下载-太平洋下载中心...
常见问答: 1.腾讯一键root工具如何卸载? 答:1.一键root时要自动安装授权管理,如果不ROOT了,想卸载"授权管理"的话,直接卸载会提示"系统软件无法卸载&qu ...
- 【产品设计】批量上传:别让一键高效工具成为“导入失败”的警报器
批量导入是在基础数据录入很常见的一个功能,即可以节省逐条新增的人力成本,又可以避免数据重复录入的问题,一举多得:但是模板处理不当,导入过程中不同报错导入失败,会让用户烦躁不安. 一.明确的导入操作指引 ...
- 当当elastic-job docker快速部署_[小Z课堂]-docker 快速部署 elasticsearch 和 kibana,一键部署...
各位小伙伴,小Z课堂来袭,每天只需看三分钟,你就能用docker 快速部署各种环境.今天就用docker 来部署 elasticsearch 和 kibana.docker的入门请上度娘学习,这里直接 ...
- 2022绿色小工具-工程电脑一键优化工具-By.Win10_x64
=======By.SOLDIER_工程电脑优化工具====== A.调整用户账号UAC为最高级别 B.启用内置管理员账户的管理员模式 C.关机时强制杀后台程序,关机或重启无延时 D.关闭 ...
- 一键部署工具easy-jenkins,界面友好,操作简单
文章目录 前言 一.项目地址 二.使用步骤 1.项目结构 2.启动主类 EasyJenkinsApplication 3.安装 4.项目启动图 三.功能点介绍 1.部署列表 1.添加连接(部署jar) ...
- lnmp一键部署脚本
LNMP一键部署脚本 LNMP代表的是:linux系统下 nginx+mysql+php 网站服务器架构 一键部署的意思是,执行脚本,解决所有依赖关系,没有报错.脚本执行完成,环境部署完成 所以在做一 ...
- LNMP架构搭建和一键部署LNMP
文章目录 一.LNMP工作原理 1.LNMP工作原理 2.LAMP工作原理 3.LAMP和LNMP的区别 二.LNMP部署 1.安装nginx服务 1.1 安装nginx的依赖包 1.2 创建ngin ...
- 华为云服务器上部署war包(虚拟机也同样适用)
目录 linux部署war包 安装jdk 关闭防火墙 简单粗暴(推荐虚拟机使用) 复杂但安全(推荐服务器使用) 安装tomcat 部署war包 linux部署war包 安装jdk 执行命令查看可安装j ...
- linux宝塔搭建网站,宝塔Linux面板搭建网站入门教程五(宝塔Linux面板安装WordPress博客程序)...
本文于 2021-04-01 00:04 更新,本文內容具有時效性,如有失效,請在博客站內搜相關商家名稱,即可查看到關於此商家的最新優惠活動! 國外商家建議使用"谷歌瀏覽器"訪問, ...
- 使用Helm 在容器服务k8s集群一键部署wordpress
摘要: Helm 是啥? 微服务和容器化给复杂应用部署与管理带来了极大的挑战.Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Ku ...
最新文章
- 区块链BaaS云服务(28)TOP Network 之全分片主链(Layer-1)
- 【前端分享】jQuery.lazyload详解(转)
- 王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结
- 实用垃圾收集,第1部分–简介
- python用http协议传数据_python基础 -- 简单实现HTTP协议
- 微信公众号开发--微信JS-SDK扫一扫功能
- Spring Cloud服务网关 Zuul
- 在线CSS代码压缩美化工具
- 读史知今、以史为鉴 【技术商业化】
- Python之print语句
- LFW人脸数据库的简介
- 普通正态分布如何转换到标准正态分布
- VS2008简体中文版下载及安装破解
- python画小树_如何用Python画一颗小树?
- 栈帧详解ebp、esp
- 最多只需三步,彻底解决VB6中不能加载MSCOMCTL.OCX的提示
- 银行贷款客户拉新活动分析——数据分析项目实战
- RK 7.1 OTA升级提示Not enough free space on /cache to apply patches
- 《绝地求生》玩家排名预--1.介绍
- discuz论坛出现“请求来路不明”提示的解决方法
热门文章
- android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现
- 加了密的PDF如何破解复制?
- Typora markdown公式换行等号对齐_Typora编写博客格式化文档的最佳软件
- android获取短信息,从其ID Android获取短信详细信息
- php strip_tags 少,详解PHP函数 strip_tags的用法不足之处
- ctype函数_PHP ctype_xdigit()函数与示例
- aptitude 命令_C-命令行参数Aptitude问题与解答
- can收发器 rx_CANOpen系列教程03 _CAN收发器功能、原理及作用
- nginx加载图片慢_优化vue项目的首屏加载速度
- c ++向量库_将向量复制到C ++中的另一个向量