expect的爱恨情仇
背景
openvpn生成证书想把它做成一键化,这样添加新用户时候就方便
遇到的问题

我的代码
gg_vpn_keys.exp
#!/usr/bin/expect set user [lindex $argv ]
set secret [lindex $argv ] spawn /usr/share/easy-rsa/2.0/build-key-pass $user
expect {
"phrase" {send "$secret\r";exp_continue}
"phrase" {send "$secret\r";exp_continue}
"CN" {send "\r";exp_continue}
"Guangdong" {send "\r";exp_continue}
"Shenzhen" {send "\r";exp_continue}
"PP100" {send "\r";exp_continue}
"Account" {send "\r";exp_continue}
"$user" {send "\r";exp_continue}
"EasyRSA" {send "\r";exp_continue}
"mon@pp100.com" {send "\r";exp_continue}
"password" {send "\r";exp_continue}
"company name" {send "\r";exp_continue}
"certificate" {send "y\r";exp_continue}
"commit" {send "y\r";exp_continue}
eof
}
#expect eof exit -onexit {
send_user "general user cert already!!!\n"
}
gg.sh
#!/bin/sh
init_env(){
#change to root and stop openvpn and init opvpn cert
sudo su - root
/etc/init.d/openvpn stop
cd /usr/share/easy-rsa/2.0 && source ./vars
}
#read opvpn username and general password
read -t 20 -p 'pls input the username:' user || exit 1
secret=`openssl rand -hex 8`
init_cert_bak_dir(){
#create ovpn cert_bak_dir if not exist
[ -e /server/openvpn_accout_bak ] || mkdir /server/openvpn_accout_bak
[ -e /server/openvpn_accout_bak/$user ] && \
exit 1 || mkdir /server/openvpn_accout_bak/$user
}
create_passfile(){
#write cert password to user_ovpn_dir
echo $secret > /server/openvpn_accout_bak/${user}/${user}_pass_$(date +%F).txt
#general cert
[ -e /server/shells/gg_vpn_keys.exp ] && \
expect /server/shells/gg_vpn_keys.exp $user $secret
sleep 5
#copy cert to user_ovpn_dir
cp /usr/share/easy-rsa/2.0/keys/${user}* /server/openvpn_accout_bak/$user
#generay gg code
useradd $user && chown -R ${user}.$user /server/openvpn_accout_bak/$user
$gg=`sudo su - $user -c /usr/local/bin/gg-auth.py`
echo $gg >> /server/openvpn_accout_bak/${user}/${user}_pass_$(date +%F).txt
#general gg qrcode
cd /server/openvpn_accout_bak/${user} && qrencode -o ${user}_google_qrcode.png -t png -s 20 $gg
#general client ovpn file
cd /server/openvpn_accout_bak/ && cp tt100.ovpn $user/${user}.ovpn
sed -i 's#tt100#${user}#g' $user/${user}.ovpn
#general user.tar.gz file
cd /server/openvpn_accout_bak/ && tar zcf ${user}_openvpn.tar.gz ./$user
echo "good lucky"
}
main(){
init_env
init_cert_bak_dir
create_passfile
}
main
搞了老半天..没搞定 后面想起来在搞吧.
expect的爱恨情仇的更多相关文章
- [svc]expect的爱恨情仇
背景 openvpn生成证书想把它做成一键化,这样添加新用户时候就方便 遇到的问题 我的代码 gg_vpn_keys.exp #!/usr/bin/expect set user [lindex $a ...
- Menu与ActionBar的爱恨情仇
最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评 ...
- web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决
[问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的 ...
- 注解:大话AOP与Android的爱恨情仇
转载:大话AOP与Android的爱恨情仇 1. AOP与OOP的区别 平时我接触多的就是OOP(Object Oriented Programming面向对象).AOP(Aspect Oriente ...
- 除了love和hate,还能怎么表达那些年的“爱恨情仇”?
实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...
- 对json的爱恨情仇
本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...
- String、StringBuilder、StringBuffer的爱恨情仇
第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述 下文以StringBuffer为例 前面我们用字符 ...
- [转帖]探秘华为(一):华为和H3C(华三)的爱恨情仇史!
探秘华为(一):华为和H3C(华三)的爱恨情仇史! https://baijiahao.baidu.com/s?id=1620703498823290828&wfr=spider&fo ...
- Tidyverse|数据列的分分合合,爱恨情仇
Tidyverse|数据列的分分合合,爱恨情仇 本文首发于“生信补给站”Tidyverse|数据列的分分合合,一分多,多合一 TCGA数据挖掘可做很多分析,前期数据“清洗”费时费力但很需要. 比如基因 ...
随机推荐
- 转:能和LoadRunner匹敌的VS2010/2012Web负载测试
原文出处:http://www.cnblogs.com/aarond/archive/2013/04/18/performance.html VS自带的Web负载测试真的很大程度上能和专业的loadr ...
- System.Drawing.Image在Save之后Type变了
前段时间发现asp.net MVC 3附带了一个相当方便的图片处理类WebImage,常用的图片处理功能全都包括进去了,用起来是相当的爽. 在项目中刚好有相关的图片处理需求,但由于实际项目是使用asp ...
- Cross-Origin Resource Sharing协议介绍
传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片或者脚本.但是Javascript脚 ...
- 简单看看这两个类 String和StringBuilder
我记得以前在园子里面讨论这两个类的文章有很多很多,并且还拿出了很多的测试报告,在什么情况下,谁比谁快,在什么情况下,该用谁 不该用谁等等这些,我这里就不比较了,我就简单看看他们里面的内部实现,那就先看 ...
- mysql服务性能优化—my.cnf配置说明详解
MYSQL服务器my.cnf配置文档详解硬件:内存16G [client]port = 3306socket = /data/3306/mysql.sock [mysql]no-auto-rehash ...
- Java并发之CountDownLatch 多功能同步工具类
package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * CountD ...
- 用U盘制作启动盘后空间变小的恢复方法,清除U盘启动盘空间
先把u盘插好,运行cmd, 输入diskpart,回车, (输入list disk,回车,能看到磁盘大致情况,u盘一般是磁盘1) 再输入select disk 1,回车, 再输入clean,回车, 关 ...
- redis安装及基础操作(1)
============================================================= 编译安装 0.环境 Linux:centos6.5 redis:3.0.5 ...
- perl多线程理解
Thread:在使用多线程处理比较大的数据量的扫描,遇到读写文件可能死锁的问题. Perl 线程的生命周期 1.使用 threads 包的 create() 方法: use threads; sub ...
- Java Web之会话技术
客户端与服务器通信过程中,会产生一些数据.比如,A和B分别登陆了某宝购物网站,A买了一个Android手机,B买了一个iPhone手机,当结账时,web服务器需要分别对用户A和B的信息分别保存.根据J ...