linux使用expect批量部署应用

前言:上一篇讲了cobbler,这篇来讲下expect。以前分发文件的时候都是用for循环依次去读ip。当然前提你还得先把ssh通道打通。虽然说expect不用提前做什么准备工作,只需要写两个脚本即可。但是个人认为没有ssh安全。因为使用expect的时候你得先把你的账户写到一个文件里面。且都是明文存储。至于能否加密什么的有待研究。而ssh大家都知道,互换秘钥相对来说安全一点。好了,不多说。来看看它具体应用吧。

#1 安装

[[email protected] ~]# yum install expect -y

#2 使用之命令执行

分两个步骤:

@1使用for循环读取服务器IP、密码列表并取值

@2命令执行

列:在两台服务器上执行"mkdir -p /tmp/`date +%Y%m%d`"

首先创建一个登陆脚本。

[[email protected] ~]# vim login.exp
#!/usr/bin/expect -f
set ip [lindex $argv 0 ]
set passwd [lindex $argv 1 ]
set command [lindex $argv 2]
set timeout 1
spawn ssh [email protected]$ip
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "*#*" { send "$command\r" }
expect eof

然后创建一个执行脚本。

[[email protected] ~]# vim exec.sh
#!/bin/sh
CMD="$*"
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  "$CMD"
done

建立账户文件。(格式:IP 密码 中间加空格)

[[email protected] ~]# cat passwd.txt 
192.168.175.128 123456xx
192.168.175.129 123456xx
[[email protected] ~]#

来测试下:

[[email protected] ~]# [[email protected] ~]# /bin/sh exec.sh "mkdir -p /tmp/`date +%Y%m%d`"
spawn ssh [email protected]
[email protected]‘s password: 
Last login: Fri Dec 19 13:56:07 2014 from 192.168.175.130
[[email protected] ~]# mkdir -p /tmp/20141219
[[email protected] ~]# [[email protected] ~]#

验证一下。

[[email protected] ~]# ifconfig eth0 | awk ‘/inet addr/ {print $2}‘ | cut -f2 -d ":"
192.168.175.128
[[email protected] ~]# ls /tmp
20141219        orbit-root          pulse-eQxFW8on4dad  virtual-root.aBsUjs  virtual-root.DsVJFE  vmware-root
keyring-e1rFbt  pulse-dVLX9iw0mWPw  ssh-YVWNES1756      virtual-root.cDhcQC  virtual-root.S5Y5rX  yum.log
[[email protected] ~]#

#3 使用之文件传输

同上。只不过需要修改两个脚本中的相关参数变量。

登录脚本(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 [email protected]$ip:$des_dir
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "#*"
expect eof

传输脚本(send.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

账户文件(passwd.txt)保持不变。

然后来测试。

[[email protected] ~]# echo "Sx4MK 20141219" > test.txt
[[email protected] ~]# /bin/sh send.sh test.txt /root
spawn scp -r test.txt [email protected]:/root
[email protected]‘s password: 
test.txt                                                                                                                     100%   15     0.0KB/s   00:00    
[[email protected] ~]#

验证一下。

[[email protected] ~]# ls
anaconda-ks.cfg  install.log  install.log.syslog  test.txt  公共的  模板  视频  图片  文档  下载  音乐  桌面
[[email protected] ~]# cat test.txt 
Sx4MK 20141219
[[email protected] ~]# ifconfig eth0 | awk ‘/inet addr/ {print $2}‘ | cut -f2 -d ":"
192.168.175.128
[[email protected] ~]#
时间: 2024-07-31 05:45:04

linux使用expect批量部署应用的相关文章

使用Shell脚本+expect批量部署ssh

Shell脚本+expect批量部署ssh一.准备工作及思路1,三台机器做实验(centos6.5.IP:192.168.0.22 (主控制).192.168.0.156.192.168.0.157)2,IP:22这一台做主控机器,另外2台做客户机.3,提前在主控制机器上创建好公钥,安装好expect,使用脚本批量推送ssh公钥.4,本次部署是以root身份进行下面的操作.二.正式部署1,首先穿件秘钥[[email protected] .ssh]# ssh-keygen -t rsa Gene

linux通过expect批量修改密码

公司最近要上一批CDN服务器,需要定期修改密码,原本想用自动化工具来实现这个功能,但是最近比较忙没有时间搞,所以先用脚本的方式来修改,上网搜索了一下,发现大同小异,所以参考网络上脚本做了个测试,结果一个下午没了,坑稍微有点多,在下文我会尽量解释清楚,以避免像我这样的新人掉坑,不多说,正文开始! 系统环境:CentOS Linux release 7.3.1611 (Core) Selinux: disable 执行目录: /home 一 , 需求:linux环境下运行,需要tcl和expect支

Linux下expect批量更改交换机端口属性

一.for循环 功能:将端口划入同一vlan. 将10.240.210.29交换机上的1到36端口划入vlan210 #!/usr/bin/expect -f #set HOST [lindex $argv 0] #set PORT [lindex $argv 0] #set vlan [lindex $argv 1] set vlan 210 for {set PORT 1 } {$PORT <= 36} {incr PORT} {    spawn telnet 10.240.210.29

linux 使用pssh批量部署tomcat

ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.3.2 tar -xvf pssh-2.3.1.tar.gz cd pssh-2.3.1 python setup.py install 创建所有服务器列表txt文件allhosts vim allhosts>>192.168.3.1-15 创建java目录 pssh -i -h allhosts "mkdir /usr/local/java" 拷贝jdk文

PXE+kickstart实现批量部署linux系统

当企业有大量的新机需要安装系统,如果每台都接上系统光盘并人工选择配置安装,无疑工作量巨大.而 PXE+kickstart 的安装方式能够实现自动化批量部署,特别适用于这种场景. 一.批量部署方式 ①物理机:PXE 负载均衡 ②虚拟机:映像文件模板 分布式文件系统 无论是针对物理机还是虚拟机的批量部署,都会对文件服务器造成巨大的压力,可以分别使用负载均衡和分布式文件系统的方式缓解 二.PXE工作原理 客户机通过支持PXE的网卡请求DHCP服务器 --> DHCP服务器给客户端分配IP地址等,并告诉

Linux批量部署无密钥脚本

##### 批量部署ssh私钥认证 ##### 一.首先安装expect,直接yum即可 二.批量部署ssh私钥脚本 batch_sshkey.sh============================================================== #!/bin/bash cd /root cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys for i in `cat ip.txt`doip=$(echo "

PXE实现批量部署linux系统

pxe批量部署linux服务器 1.pxe介绍 PXE是有intel设计的协议,它可以使计算机通过网络启动,协议分为client和server两端,PXEclient在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存中执行,并显示出命令菜单,经用户选择PXE启动后,PXE client获取网络地址信息,然后将放置在远端的服务器上的操作系统文件通过网络下载到本地运行 既然是通过网络传输,就需要IP地址,也就是说在PXE启动过程中,PXE客户端会请求DHCP服务器分配IP地址,

详解使用Cobbler快速批量部署linux系统

前言:这几天闲着没事来系统组玩玩,学点东西总是好的嘛.系统组系统组当然还是从学会装系统开始.花了两个小时折腾了一下用cobbler批量部署linux系统.第一次做当然中间遇到很多问题,不过都顺利解决了.完了总结一下写个帖子和大家分享一下. 系统版本:Centos6.5 32位cobbler服务器IP:192.168.175.130 IP地址段:192.168.175.120-192.168.175.140子网掩码:255.255.255.0网关:192.168.175.2DNS:8.8.8.8

Linux下批量部署安装--PXE

Linux操作系统如何安装? 以及如何自动(无人值守)安装? 以及如何批量自动安装? 下面我们会一一的来介绍. 以下操作以CentOS6系列为例,以 VMware 作为虚拟机管理器进行实验. 一.安装系统 1.个人 pc 如何安装一个Linux操作系统使用呢? Linux操作系统的安装过程大致如下: 以本地镜像为例,POST加点自检,加载镜像文件中的内核和临时根文件系统,最后会启动anaconda的安装程序,此程序是交互式的,帮助用户来选择安装前的一些操作,完成这一步操作之后,进入真正的安装包软