openvpn自动化管理用户密钥

作者: ls 分类: Linux,Shell脚本 发布时间: 2018-01-22 15:47 浏览:1,785 次    

一、创建expect交互脚本

1、安装expect 命令

[root@VPN ~]#yum -y install expect

2、进入vpn所在位置

[root@VPN ~]# cd  /etc/openvpn/easy-rsa/2.0

3、创建自动应答交互脚本vpn_create.expect

[root@VPN 2.0]# vim vpn_create.expect
#!/usr/bin/expect -f
 if $argc<1 {
 puts stderr "Usage: $argv0 need argv.\n"
 exit 1
 }
 set vpnuser [lindex $argv 0]
 set path /etc/openvpn/easy-rsa/2.0
 spawn $path/build-key $vpnuser
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "\r"
 expect "*"
 send "y\r"
 expect "*"
 send "y\r"
 expect eof
 exit

4、添加权限

[root@VPN 2.0]#chmod 755  vpn_create.expect

二、创建vpnuser命令脚本

1、创建命令目录($HOME/bin)

[root@VPN ~]# mkdir bin

2、创建用户密钥目录

[root@VPN ~]#mkdir keys

3、创建vpnuser命令脚本

[root@VPN ~]# cd bin
[root@VPN bin]# vim vpnuser
#!/bin/bash
  canshu_num=$#
  xuan_ze=$1
  vpn_user=$2
  help()
  #帮助函数
  {
  echo '添加vpn用户执行命令: vpnuser add vpn用户名'
  echo '删除vpn用户执行命令: vpnuser del vpn用户名'
  }
  add_user()
  #新建vpn用户函数
  {
  if [ -f /etc/openvpn/easy-rsa/2.0/keys/$vpn_user.crt ];then
  echo "================================================<温馨提示>================================================"
  echo "VPN用户:$vpn_user已存在,请检查后操作!!"
  echo "=========================================================================================================="
  else
  cd /etc/openvpn/easy-rsa/2.0
  source ./vars &>/dev/null
  ./vpn_create.expect $vpn_user &>/dev/null
  cd /etc/openvpn/easy-rsa/2.0/keys
  cp $vpn_user.* ca.crt client.ovpn /root/keys
  echo "cert $vpn_user.crt">>client.ovpn
  echo "key $vpn_user.key">>client.ovpn
  cd /root/keys
  tar zcf $vpn_user.tar.gz $vpn_user.* ca.crt client.ovpn &>/dev/null
  echo "================================================<成功提示>================================================"
  echo "新建vpn用户:$vpn_user成功!"
  rm -rf $vpn_user.c* $vpn_user.key ca.crt client.ovpn
  echo "================================================<成功提示>================================================"
  echo "新建vpn用户:$vpn_user 密钥已生成在/root/keys 下,请自行获取!!!"
  echo "=========================================================================================================="
  fi
  }
  copy_user()
  #拷贝vpn用户函数
  {
  cd /etc/openvpn/easy-rsa/2.0/keys
  cp $vpn_user.* ca.crt client.ovpn /root/keys
  cd /root/keys
  echo "cert $vpn_user.crt">>client.ovpn
  echo "key $vpn_user.key">>client.ovpn
  tar zcf $vpn_user.tar.gz $vpn_user.* ca.crt client.ovpn &>/dev/null
  rm -rf $vpn_user.c* $vpn_user.key ca.crt client.ovpn
  echo "================================================<成功提示>================================================"
  echo "vpn用户:$vpn_user 密钥已拷贝/root/keys 下,请自行获取!!!"
  echo "=========================================================================================================="
}

  del_user()
  #删除vpn用户函数
  {
  cd /etc/openvpn/easy-rsa/2.0/
  source ./vars &>/dev/null
  /etc/openvpn/easy-rsa/2.0/revoke-full $vpn_user &>/dev/null
  rm -rf /etc/openvpn/easy-rsa/2.0/keys/$vpn_user.*
  echo "================================================<成功提示>================================================"
  echo "注销并已删除vpn用户:$vpn_user成功!"
  echo "=========================================================================================================="
  }
  main()
  #主函数
  {
  if [ $canshu_num -ne 2 ];then
  echo "================================================<错误提示>================================================"
  echo "输入参数无效,请检查!"
  echo "================================================<帮助提示>================================================"
  help
  echo "=========================================================================================================="
  else
  if [ $xuan_ze = "add" ];then
  add_user
  elif [ $xuan_ze = "copy" ];then
  copy_user
  elif [ $xuan_ze = "del" ];then
  del_user
  else
  echo "================================================<错误提示>================================================"
  echo '输入参数类型无效,类型只包含add|copy|del'
  echo "================================================<帮助提示>================================================"
  help
  echo "=========================================================================================================="
  fi
  fi
  }
  main

4、添加执行权限

[root@VPN bin]# chmod 755 vpnuser

5、检测环境变量$PATH路径

[root@VPN bin]# echo $PATH
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

注:默认$PATH中就有$HOME/bin ,只是进一步确认,保证vpnuser命令正确执行

三、测试

1、添加用户

命令格式:vpnuser add vpn用户名

[root@VPN ~]# vpnuser add admin
================================================<成功提示>================================================
  新建vpn用户:admin成功!
  ================================================<成功提示>================================================
  新建vpn用户:admin 密钥已生成在/root/keys 下,请自行获取!!!
  ==========================================================================================================

2、删除用户

命令格式:vpnuser del vpn用户名

[root@VPN ~]# vpnuser del admin
================================================<成功提示>================================================
注销并已删除vpn用户:admin成功!
==========================================================================================================

3、如果用户已存在

[root@VPN ~]# vpnuser add admin
================================================<温馨提示>================================================
VPN用户:admin已存在,请检查后操作!!
==========================================================================================================

4、参数错误

[root@VPN ~]# vpnuser a admi
================================================<错误提示>================================================
输入参数类型无效,类型只包含add|del
================================================<帮助提示>================================================
添加vpn用户执行命令vpnuser add vpn用户名
删除vpn用户执行命令vpnuser del vpn用户名
==========================================================================================================

5、查看已生成用户密钥

[root@VPN ~]# ls keys
admin.tar.gz

 

注:使用sz、ftp、tftp、xftp等工具下载使用!

 

本文部分内容来源于“成都@阿状 ”  ,由本站“寻音” 优化整理制作完成!

 

 


温馨提示:如无特殊说明,本站文章均为作者原创,转载时请注明出处及相应链接!

发表评论