linux使用expect批量部署应用
前言:上一篇讲了cobbler,这篇来讲下expect。以前分发文件的时候都是用for循环依次去读ip。当然前提你还得先把ssh通道打通。虽然说expect不用提前做什么准备工作,只需要写两个脚本即可。但是个人认为没有ssh安全。因为使用expect的时候你得先把你的账户写到一个文件里面。且都是明文存储。至于能否加密什么的有待研究。而ssh大家都知道,互换秘钥相对来说安全一点。好了,不多说。来看看它具体应用吧。
#1 安装
[root@localhost ~]# yum install expect -y
#2 使用之命令执行
分两个步骤:
@1使用for循环读取服务器IP、密码列表并取值
@2命令执行
列:在两台服务器上执行"mkdir -p /tmp/`date +%Y%m%d`"
首先创建一个登陆脚本。
[root@localhost ~]# 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 root@$ip expect { "yes/no" { send "yes\r";exp_continue } "password:" { send "$passwd\r" } } expect "*#*" { send "$command\r" } expect eof
然后创建一个执行脚本。
[root@localhost ~]# 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 密码 中间加空格)
[root@localhost ~]# cat passwd.txt 192.168.175.128 123456xx 192.168.175.129 123456xx [root@localhost ~]#
来测试下:
[root@Sx4MK ~]# [root@localhost ~]# /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 [root@Sx4MK ~]# mkdir -p /tmp/20141219 [root@Sx4MK ~]# [root@localhost ~]#
验证一下。
[root@Sx4MK ~]# ifconfig eth0 | awk ‘/inet addr/ {print $2}‘ | cut -f2 -d ":" 192.168.175.128 [root@Sx4MK ~]# 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 [root@Sx4MK ~]#
#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 root@$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)保持不变。
然后来测试。
[root@localhost ~]# echo "Sx4MK 20141219" > test.txt [root@localhost ~]# /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 [root@localhost ~]#
验证一下。
[root@Sx4MK ~]# ls anaconda-ks.cfg install.log install.log.syslog test.txt 公共的 模板 视频 图片 文档 下载 音乐 桌面 [root@Sx4MK ~]# cat test.txt Sx4MK 20141219 [root@Sx4MK ~]# ifconfig eth0 | awk ‘/inet addr/ {print $2}‘ | cut -f2 -d ":" 192.168.175.128 [root@Sx4MK ~]#
本文出自 “Sx4MK” 博客,请务必保留此出处http://sasoes.blog.51cto.com/9746620/1591720
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。