linux批量部署war工具,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 ]#读取ip

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

set command [lindex $argv ]#命令

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

192.168.17.128

192.168.17.136

四、测试脚本

直接执行:

[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 ]

set passwd [lindex $argv ]

set src_file [lindex $argv ]

set des_dir [lindex $argv ]

set timeout

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

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 &&exit

fi

#Auto Tuoch login.exp File

cat >login.exp <

#!/usr/bin/expect -f

set ip [lindex \$argv ]

set passwd [lindex \$argv ]

set src_file [lindex \$argv ]

set des_dir [lindex \$argv ]

set timeout

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

expect {

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

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

}

expect "#*"

expect eof

EOF

##Auto exec shell scripts

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

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

sleep

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.exp $i $j $src_file $des_dir

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

以下是expect用法

. [#!/usr/bin/expect]

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

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

. [set timeout ]

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

. [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运行进程加个壳,用来传递交互指令。

. [expect "password:"]

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

. [send "ispass\r"]

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

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

. [interact]

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

.$argv 参数数组

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

参考来源:http://www.linuxidc.com/Linux/2013-08/88660.htm

linux自动交互工具expect,tcl安装和安装包,以及自动互信脚本

linux自动交互工具expect,tcl安装,以及自动互信脚本 工作中需要对几十台服务器做自动互信,无意中发现expect命令,研究一番. 在网上找了许多资料也没有安装成功,摸索着总算成功了.现分享 ...

Ansible批量部署工具

Ansible:自动化运维工具 你需要在一台机器上yum install 一个包,这时候有一个需求,比如现在有5台机同时需要装apache这个包,那么100台呢,ssh上去就太慢了,这时候就借助到了a ...

Linux批量管理工具Ansible

Ansible-批量linux管理工具:https://github.com/ansible/ansible Ansible有如下优点: 1.轻量级,他不需要去客户端安装agent,更新时,只需要在操 ...

linux批量执行工具omnitty使用方法

一.omnitty概述 在生产环境中,可能会有多台linux主机.运维人员可能会对多台主机进行同样的操作,例:同时在多台主机上添加一个user或查看所有主机的硬件信息,如果没有批量操作工具,设备少于2 ...

Linux自动化命令工具expect

expect是Unix系统中用来进行自动化控制和测试的软件工具,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等. 用法 Linux中我们经常写脚本处 ...

Linux 批量管理工具

pssh/pscp(Python) ansible(Python) saltstack(Python) chef puppet(Ruby) fabric(Python)

Ansible批量部署工具的安装

1.系统安装gcc,以及python2.6以上(2.6.8): 第一种比较简单的安装方法: 1)直接yum install -y ansible; 2)然后更改配置,/etc/ansible/ansi ...

Linux系统——Ansible批量管理工具

批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

随机推荐

cssSelector定位笔记1

cssSelector定位方法:1.使用class属性定位元素:driver.findElement(By.cssSelector("input.login"));即可以先指定一个 ...

linux 常用命令总结

PS命令: 1.命令格式: ps[参数] 2.命令功能: 用来显示当前进程的状态 3.命令参数: a  显示所有进程 -a 显示同一终端下的所有程序 -A 显示所有进程 c  显示进程的真实名称 -N ...

IOS多线程(NSOperation&comma;NSOperationQueue)

含义:NSOperation,NSOperationQueue是什么. The NSOperation class is an abstract class you use to encapsulat ...

css阴影效果

moz-box-shadow: 0 0 10px #888; -webkit-box-shadow: 0 0 10px#888; box-shadow: 0 0 10px #888;

Oracle学习第二天---Profile的使用

环境:Oracle 11g 一.权限的传递 1.如果传递的是对象权限,就在后面加入with grant option: eg:system用户有张temp的表,只想usertest用户拥有查询的权限, ...

1048&colon; &lbrack;HAOI2007&rsqb;分割矩阵 - BZOJ

Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了 ...

NOIP2012 Vigen&&num;232&semi;re 密码

1.Vigenère 密码 (vigenere.cpp/c/pas) [问题描述] 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码.V ...

make file 详

一: linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a ...

Platt SMO 和遗传算法优化 SVM

机器学习算法实践:Platt SMO 和遗传算法优化 SVM 之前实现了简单的SMO算法来优化SVM的对偶问题,其中在选取α的时候使用的是两重循环通过完全随机的方式选取,具体的实现参考

【Python】爬虫-Scrapy

[Scrapy] Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据. Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值