背景

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. Java垃圾回收精粹 — Part1

    Java垃圾回收精粹分4个部分,本篇是第1部分.在第1部分里介绍了权衡点.对象生命周期以及全局暂停事件. 串行.并行.并发.CMS.G1.年轻代(Young Gen).新生代(New Gen).旧生代 ...

  2. SharePoint 在中国为什么吃不开?

    1.功能不完善,二次开发费时费力?2.没有完整的解决方案,案例太少,很多企业不敢下手?3.国内人员,操作性比较差,不愿意接受SharePoint的操作方式?4.价格太贵,小型企业花费性价比不高?5.界 ...

  3. eclipse下使用git上传(下载)代码至(从)github

    eclipse下使用git插件上传代码至github 1.eclipse下安装git 正常情况下,eclipse 是自带 git 插件的,那么即可跳至步骤1的最后一小步,配置 git . 如果十分悲剧 ...

  4. Web开发者需养成的8个好习惯

    优秀的Web开发人员工作效率更高,因为他们拥有丰富的经验和良好的习惯.作者Gregor Dorfbauer分享了用于Web开发中的8个好习惯,这些良好的工作习惯不仅能提高效率,还能让您创建更加优秀的应 ...

  5. IE6支持min-width、max-width CSS样式属性

    1.IE6支持max-width解决方法 IE6支持最大宽度,解决CSS代码: .yangshi{ max-width:1000px; _width:expression((document.docu ...

  6. Android之旅 自我图示总结四大组件

    最近学完了Android的四大组件的基础知识,自己总结了一个图示,希望自己看到这个图的时候能回忆起相关的知识点,与大家分享!

  7. JS实现的MAP结构数据

    Array.prototype.remove = function(s) { for (var i = 0; i < this.length; i++) { if (s == this[i]) ...

  8. [AngularJS] Angular 1.3 ngAria - 2

    This is an highlight about ngAira in Angular Document abou ngAira Where can use ngAria? Currently, n ...

  9. 流操作结束后,一定要调用close(). java有垃圾回收器, 这样做是多此一举吗?

    流不单在内存中分配了空间,也在操作系统占有了资源, java的gc是能从内存中回收不使用的对象, 但对操作系统分配的资源是无能为力的, 所以就要调用close()方法来通知OS来释放这个资源.

  10. 记一发Hive on tez的配置(Hive 3.1.1, Hadoop 3.0.3, Tez 0.9.1)

    直接下载Tez的binary包部署安装是有问题的,因为默认支持hadoop版本为2.7,2.7以上的就需要手动编译了. 下载Tez源码 CD到源码文件夹,mvn install -Dhadoop.ve ...