背景

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

搞了老半天..没搞定 后面想起来在搞吧.

[svc]expect的爱恨情仇的更多相关文章

  1. expect的爱恨情仇

    背景 openvpn生成证书想把它做成一键化,这样添加新用户时候就方便 遇到的问题 我的代码 gg_vpn_keys.exp #!/usr/bin/expect set user [lindex $a ...

  2. Menu与ActionBar的爱恨情仇

    最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评 ...

  3. web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决

    [问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的 ...

  4. 注解:大话AOP与Android的爱恨情仇

    转载:大话AOP与Android的爱恨情仇 1. AOP与OOP的区别 平时我接触多的就是OOP(Object Oriented Programming面向对象).AOP(Aspect Oriente ...

  5. 除了love和hate,还能怎么表达那些年的“爱恨情仇”?

    实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...

  6. 对json的爱恨情仇

    本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面 ...

  7. String、StringBuilder、StringBuffer的爱恨情仇

    第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述 下文以StringBuffer为例 前面我们用字符 ...

  8. [转帖]探秘华为(一):华为和H3C(华三)的爱恨情仇史!

    探秘华为(一):华为和H3C(华三)的爱恨情仇史! https://baijiahao.baidu.com/s?id=1620703498823290828&wfr=spider&fo ...

  9. Tidyverse|数据列的分分合合,爱恨情仇

    Tidyverse|数据列的分分合合,爱恨情仇 本文首发于“生信补给站”Tidyverse|数据列的分分合合,一分多,多合一 TCGA数据挖掘可做很多分析,前期数据“清洗”费时费力但很需要. 比如基因 ...

随机推荐

  1. ubuntu 设置静态IP GW

    网卡配置静态IP地址 编辑文件/etc/network/interfaces: sudo vi /etc/network/interfaces 并用下面的行来替换有关eth0的行:# The prim ...

  2. 有用的iOS网站地址

    王巍 (@onevcat) 是一名 iOS 和 Unity3D 开发者,现旅居日本,正在寻求创意之源.http://swifter.tips/http://onevcat.com/2013/02/xc ...

  3. Scrum 思考

    下个月就要离职,所以这个月特别清闲,上班时间都在上网看书,偶然在Startup News的一篇文章(http://blog.devtang.com/blog/2013/06/17/startup-an ...

  4. 第三章 consul服务注册与服务查询

    1.定义一个服务 https://www.consul.io/docs/agent/services.html 该方法是服务注册中提供服务的最常用的方法. 关于服务的定义:服务的属性我们会在后边每出现 ...

  5. Virtualbox中Linux添加新磁盘并创建分区

    原文:https://www.linuxidc.com/Linux/2017-01/139616.htm ----------------------------------------------- ...

  6. (转)Akka学习笔记(二):Actor Systems

    Akka学习笔记(二):Actor Systems 图中表示的是一个Actor System,它显示了在这个Actor System中最重要实体之间的关系. 什么是actor,是一个封装了状态和行为的 ...

  7. Yii学习笔记之二(使用gii生成一个简单的样例)

    1. 数据库准备 (1) 首先我们建一数据库 yii2test 并建立一张表例如以下: DROP TABLE IF EXISTS `posts`; CREATE TABLE `posts` ( `po ...

  8. (剑指Offer)面试题44:扑克牌的顺子

    题目: 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这五张牌是不是连续的,2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字. 思路: 把5张牌看成一个数组,就看排序 ...

  9. mysql查找数据库中是否已经存在某张表

    Sql: select count(*) from information_schema.TABLES t where t.TABLE_SCHEMA ="数据库名" and t.T ...

  10. iOS socket Stream 服务器端 及 客户端 演示

    iOS socket Stream 测试环境,mac osx 10.8 一:建立服务器端 由于mac osx10.8 已经集成 python2和 Twisted,我们可以直接利用此,构建一个简单的so ...