shell脚本之一键部署openV~P~N

提前准备:/root目录下:
checkpsw.sh ## 官方提供的自定义脚本,可在http://openvpn.se/files/other/checkpsw.sh下载
openvpn@.service #openvpn的服务启动文件,centos8缺失unit文件,从CentOS7复制文件或者自己写一个。
windows客户端需要提前下载客户端:https://openvpn.net/community-downloads/
点击查看代码
#!/bin/bash
#
#********************************************************************
#Author: wangdayu
#QQ: 965507991
#Date: 2022-08-20
#FileName: autovpn.sh
#URL: https://blog.51cto.com/dayu
#Description: The test script
#Copyright (C): 2022 All rights reserved
#********************************************************************
. /etc/init.d/functions
server=dayuserver
client=wangdayu
serverIP=`hostname -I|awk '{print $1}'`
# 安装openvpn和easy-rsa
install(){
if yum repolist |grep -i epel ;then
yum install -y openvpn easy-rsa
else
cat > /etc/yum.repos.d/epel.repo <<EOF
[epel]
name=EPEL
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch
gpgcheck=0
enabled=1
EOF
yum install -y openvpn easy-rsa
fi
}
# CA环境部署和初始化生成ca证书
CA_init(){
cd /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/3/ /etc/openvpn/easy-rsa
cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa/vars
sed -r -i.bak 's/^#(set_var EASYRSA_CA_EXPIRE).*[0-9]+.*/\1 36500/' /etc/openvpn/easy-rsa/vars
sed -r -i.bak 's/^#(#set_var EASYRSA_CERT_EXPIRE).*[0-9]+.*/\1 3650/' /etc/openvpn/easy-rsa/vars
cd /etc/openvpn/easy-rsa
./easyrsa init-pki <<EOF
EOF
./easyrsa build-ca nopass <<EOF
EOF
}
# 创建服务器证书
server_init(){
cd /etc/openvpn/easy-rsa
./easyrsa gen-req $server nopass <<EOF
EOF
./easyrsa sign server $server <<EOF
yes
EOF
./easyrsa gen-dh
cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/issued/$server.crt /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/private/$server.key /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/server/
mkdir /var/log/openvpn
chown openvpn.openvpn /var/log/openvpn
[ -e /etc/openvpn/checkpsw.sh ] || cp /root/checkpsw.sh /etc/openvpn/checkpsw.sh ; echo "已拷贝/root/checkpsw.sh至/etc/openvpn/checkpsw.sh";
chmod +x /etc/openvpn/checkpsw.sh
}
# 创建服务器配置文件
server_config(){
cat > /etc/openvpn/server.conf <<EOF
port 1194
proto tcp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/$server.crt
key /etc/openvpn/server/$server.key
dh /etc/openvpn/server/dh.pem
server 10.8.0.0 255.255.255.0
push "route 172.30.0.0 255.255.255.0"
keepalive 10 120
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
max-clients 1000
user openvpn
group openvpn
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
mute 20
script-security 3
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
username-as-common-name
EOF
}
# 用户名密码
userPW(){
read -p "请输入创建的用户名:" user
read -p "请输入密码:" password
echo "$user $password" >> /etc/openvpn/psw-file
}
# 启动openvpn服务
start_openvpn(){
[ -e /lib/systemd/system/openvpn@.service ] || cp /root/openvpn@.service /lib/systemd/system/
systemctl daemon-reload
systemctl enable --now openvpn@server
}
# 创建客户端证书
client_req(){
cd /etc/openvpn/easy-rsa
sed -r -i.bak 's/^#(#set_var EASYRSA_CERT_EXPIRE).*3650.*/\1 90/' /etc/openvpn/easy-rsa/vars
./easyrsa gen-req $client nopass <<EOF
EOF
./easyrsa sign client $client <<EOF
yes
EOF
mkdir /etc/openvpn/client/$client
find /etc/openvpn/easy-rsa/ -name "${client}*" -exec cp {} /etc/openvpn/client/${client}/ \;
cp pki/ca.crt ../client/$client/
}
# 创建客户端配置文件
client_config(){
cat > /etc/openvpn/client/$client/$client.ovpn <<EOF
client
dev tun
proto tcp
remote $serverIP 1194 #生产中为OpenVPN服务器的FQDN或者公网IP
resolv-retry infinite
nobind
ca ca.crt
cert $client.crt
key $client.key
remote-cert-tls server
cipher AES-256-CBC
verb 3 #此值不能随意指定,否则无法通信
compress lz4-v2 #此项在OpenVPN2.4.X版本使用,需要和服务器端保持一致,如不指定,默认使用comp-lz压缩
auth-user-pass
EOF
cd /etc/openvpn/client/$client
tar zcvf /root/$client.tar.gz * && echo "客户端文件已打包至/root/$client.tar/gz"
}
# 吊销证书
revoke_user(){
cd /etc/openvpn/easy-rsa
read -p "请输入需要吊销证书的用户名:" revokeuser
cd /etc/openvpn/easy-rsa
./easyrsa revoke $revokeuser
./easyrsa gen-crl
echo "crl-verify /etc/openvpn/easy-rsa/pki/crl.pem" >> /etc/openvpn/server.conf
systemctl restart openvpn@server.service
}
# 删除用户
deluser(){
read -p "请输入需要删除的用户名:" DELuser
sed -i "/^$DELuser/d" /etc/openvpn/psw-file
}
# 增加iptables
vpn_iptables(){
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j MASQUERADE
echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j MASQUERADE' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
}
Menu(){
PS3="请选择:"
select MEMU in 创建CA 配置服务器 生成客户端文件 创建用户名密码 吊销证书 删除用户 增加iptables 退出;do
case $MEMU in
创建CA)
install && action "安装成功" || action "安装失败" false
CA_init && action "CA证书完成" || action "CA错误" false
;;
配置服务器)
server_init && action "服务器证书颁发完成" || action "服务器证书颁发错误" false
server_config && action "服务器配置文件生成" || action "服务器配置文件错误" false
start_openvpn && action "openvpn服务器配置完成,服务已启动" || action "服务启动失败" false
;;
生成客户端文件)
client_req && action "客户端证书颁发完成" || action "客户端证书颁发错误" false
client_config && action "客户端配置文件生成" || action "客户端配置文件错误" false
;;
创建用户名密码)
userPW && action "用户已创建" || action "创建失败" false
;;
吊销证书)
revoke_user && action "证书已吊销" || action "吊销失败" false
;;
删除用户)
deluser && action "删除用户成功" || action "删除失败" false
;;
增加iptables)
vpn_iptables && action "增加iptables完成" || action "增加iptables条目失败" false
;;
退出)
exit
;;
esac
done
}
Menu
shell脚本之一键部署openV~P~N的更多相关文章
- 【shell脚本】一键部署LNMP===deploy.sh
一键部署mysql,php,nginx,通过源码安装部署 #!/bin/bash # 一键部署 LNMP(源码安装版本) menu() { clear echo " ############ ...
- Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务
文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...
- 编写shell脚本实现一键创建KVM虚拟机
shell脚本一键创建虚拟机 代码如下: #!/bin/bashname=$1 #把位置变量$1重新定义为name(创建虚拟机的名字)path1=/var/lib/libvirt/images/ #i ...
- 写了shell脚本想一键启动三台虚拟机的Zookeeper,却不知道为啥总是启动不了
首先,一键启动的shell脚本是这样的 #! /bin/bash case $1 in "start"){ for i in node01 node02 node03 do ssh ...
- 急速安装lnmp 编译版本-wiki-shell脚本实现一键部署
shell脚本lnmp.sh 环境:centos 6.5 .64位 #!/bin/bash yum install -y nano vim wget wget http://www.atomicorp ...
- shell脚本编写nginx部署脚本
下面为shell脚本编写的nginx的安装及修改nginx.conf的脚本,脚本比较简单: #!/bin/bash function yum_install(){ yum install epel-r ...
- 自己开发shell脚本实现一键化安装。
一.说明在现实环境中可能需要批量部署服务器,那么在我们已经部署好一台服务以后如果实现剩下的服务批量安装呢: 使用shell能否实现功能: 假设我们要部署lamp或者是lnmp如何实现脚本部署? 使用以 ...
- shell脚本编写-自动部署及监控
1.编写脚本自动部署反向代理.web.nfs: I.部署nginx反向代理两个web服务,调度算法使用加权轮询 II.所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性: ...
- 使用shell脚本完成自动化部署及秒级回滚
一.部署机代码目录结构 使用www用户进行代码部署,所有部署机上需要创建www用户,并赋予根目录权限,同时配置公私钥认证建立信任关系. [www@ansible-node1 deploy]$ tree ...
随机推荐
- navicat创建连接 2002-can‘t connect to server on ....
环境: 系统:centos7 生产环境:docker 中部署MySQL 报错提示符:"2002-Can't connect to server on '192.168.200.22'(100 ...
- 事物的隔离性和MVCC
事物的隔离性 mysql的服务端是支持多个客户端同时与之连接的,每个客户端可能还并发了好几个连接,所以mysql是需要同时处理很多事情的,每一件独立的事情就叫做事务.我们知道事务有一个叫隔离性的特性, ...
- 【Java】学习路径58-TCP聊天-双向发送实现
这一章内容比较复杂(乱) 重点在于解决利用TCP协议实现双向传输. 其余的细节(比如end)等,不需要太在意. 但是我也把折腾经历写出来了,如果大家和我遇到了类似的问题,下文可以提供一个参考. 目标: ...
- eReplication详解
eReplication简介 eReplication是一款基于华为存储复制.快照.双活.克隆以及FusionSphere主机复制等特性,保证上层应用数据一致性,针对华为典型容灾解决方案,提供可视化. ...
- RTSP播放器或RTMP播放器常用的Evnet事件回调设计
很多开发者在开发RTSP或RTMP播放器的时候,不晓得哪些event回调事件是有意义的,针对此,我们以大牛直播SDK(github)的Android平台RTSP/RTMP直播播放端为例,简单介绍下常用 ...
- Netty 学习(三):通信协议和编解码
Netty 学习(三):通信协议和编解码 作者: Grey 原文地址: 博客园:Netty 学习(三):通信协议和编解码 CSDN:Netty 学习(三):通信协议和编解码 无论使用 Netty 还是 ...
- Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统
前言 Gitea 是一个用于代码托管的轻量级单体程序,它能与现有的经典应用集成,诸如代码分析工具 SonarQube.持续集成工具 Drone.Jenkins 以及用于工单管理的客户端插件(VSCod ...
- Python数据分析教程(二):Pandas
Pandas导入 Pandas是Python第三方库,提供高性能易用数据类型和分析工具 Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用 两个数据类型:Series, Da ...
- 创建Elasticsearch集群并为它们配置TLS安全通信
文章转载自:https://elasticstack.blog.csdn.net/article/details/105636302 文章开头讲述的是两台es主机构建一个集群,其中有关的配置可以借鉴 ...
- 使用docker-compose方式安装redash
转载自:https://anjia0532.github.io/2019/07/08/redash/ ## 安装必要工具 apt install -y pwgen python-pip pip ins ...