当前位置:网站首页>Bash exercise 17 writing scripts to install the server side of FRP reverse proxy software
Bash exercise 17 writing scripts to install the server side of FRP reverse proxy software
2022-07-05 06:20:00 【yuyuyuliang00】
Use one with public network IP Address ECS , Write the following script on it :
#!/usr/bin/bash
# install frp server in a cloud server
[ $UID -ne 0 ] && (echo "You are not the root, can not excute this script!" && exit 1)
Usage(){
echo "Usage: $0 -f <frp_package_lcation> -p <install_location> -P <listen_port> -t <token> -d <dashboard_port> -u <dashboard_username> -s <dashboard_pwd>"
}
PACKAGE=""
LOCATION=""
PORT=""
DUSER=""
PASSWD=""
TOKEN=""
DPORT=""
DPASSWD=""
while getopts f:p:P:t:d:u:s: arg
do
case $arg in
f)
PACKAGE=$OPTARG
;;
p)
LOCATION=$OPTARG
;;
P)
PORT=$OPTARG
;;
t)
TOKEN=$OPTARG
;;
d)
DPORT=$OPTARG
;;
u)
DUSER=$OPTARG
;;
s)
DPASSWD=$OPTARG
;;
?)
echo "Invalid Options:~$OPTARG"
Usage
exit 1
;;
esac
done
# check the package whether exists and starts with frp
if [ -f ${PACKAGE} ];then
package=$(basename "${PACKAGE}")
if [[ ! "${package}"=~^frp ]] || [[ ! "{package}"=~\.tar\.gz$ ]];then
echo "The package is not the frp package, please use the right package!"
exit 1
fi
else
echo "The package to install was wrong, please check again! "
Usage
exit 1
fi
# check the path to install the package is right
if [ -n "${LOCATION}" ];then
LOCATION=${LOCATION%/}
if [ ! -e ${LOCATION} ];then
mkdir -p ${LOCATION}
[ $? -ne 0 ] && ( echo "can not make the path to install the package" && exit 2)
elif [ ! -d ${LOCATION} -o ! -x ${LOCATION} ];then
echo "you did not give the right location or it can not be accessed!"
exit 2
fi
else
echo "You must give the location to install with -p option argument"
Usage
exit 2
fi
if [ -n "${PORT}" ];then
if [[ ! "${PORT}" =~ ^[0-9]+$ ]];then
echo "The Listen port must be a number smaller than 65536"
exit 3
fi
if [ ${PORT} -gt 65536 ];then
echo "The Listen port must be a number smaller than 65536"
exit 3
fi
port=$( ss -ltnp | sed -n '2,$p' | awk '{print $4}' | cut -d':' -f2 | grep ${PORT})
if [ -n "${port}" ];then
echo "${PORT} is already be used by another program, Please use anther port"
exit 3
fi
else
PORT=7000
fi
if [ -n "$TOKEN" ];then
if [[ ! "$TOKEN" =~ ^[a-zA-Z0-9_]{6,10}$ ]];then
echo "token can only contain alphabeta , digital or underscore from 6 to 10"
exit 4
fi
else
echo "You must give the token consisting of only alphabeta, digital or underscore from 6 to 10 using -t option"
Usage
exit 4
fi
if [ -n "$DPORT" ];then
if [[ ! "${DPORT}" =~ ^[0-9]+$ ]];then
echo "The Listen port must be a number smaller than 65536"
exit 3
fi
if [ ${DPORT} -gt 65536 ];then
echo "The Listen port must be a number smaller than 65536"
exit 3
fi
port=$( ss -ltnp | sed -n '2,$p' | awk '{print $4}' | cut -d':' -f2 | grep ${DPORT})
if [ -n "${port}" -o "${port}" == "${PORT}" ];then
echo "${DPORT} is already be used by another program, Please use anther port"
exit 3
fi
else
DPORT=7500
fi
if [ -n "DUSER" ];then
if [[ ! "${DUSER}" =~ ^[a-zA-Z]{1}[a-zA-Z0-9_]{2,7}$ ]];then
echo "dash board username should start with alphabeta and only contain alphabeta, digital or underscore from 3 to 8 characters"
exit 5
fi
else
echo "You shold give dash board username starting with alphabeta and only containing alphabeta, digital or underscore from 3 to 8 characters"
Usage
exit 5
fi
if [ -n "$DPASSWD" ];then
if [[ ! "$DPASSWD" =~ ^[a-zA-Z0-9_]{6,10}$ ]];then
echo "dash board password can only contain alphabeta , digital or underscore from 6 to 10"
exit 6
fi
else
echo "You must give the dash board password consisting of only alphabeta, digital or underscore from 6 to 10 using -s option"
Usage
exit 6
fi
echo "Package Location:$PACKAGE"
echo "Install Location:$LOCATION"
echo "Listen Port:$PORT"
echo "Token:$TOKEN"
echo "Dash board Port:$DPORT"
echo "Dash board User:$DUSER"
echo "Dash board Password:$DPASSWD"
read -p "Are you Sure to use these above arguments[Yes/No]" CHOSE
if [[ ! "$CHOSE" =~ ^[Yy]es$ ]];then
echo "You did not choose to install the package, exit"
exit 1
fi
echo "Starting to install frp package ..."
echo "uncompress the ${PACKAGE} to ${LOCATION} ..."
tar -xvzf ${PACKAGE} -C ${LOCATION} &>/dev/null
[ $? -ne 0 ] && (echo "can not uncompress the package to destination" && exit 1)
echo "uncompressed completed"
CURDIR=$(pwd)
package=$(basename ${PACKAGE})
INSTDIR=${LOCATION}/${package%.tar.gz}
echo "Goto to install path: ${INSTDIR}"
cd ${INSTDIR} || (echo "can not access the path: ${INSTDIR}" && exit 1)
echo "backup frps.ini to frp.ini.bak"
mv frps.ini frps.ini.bak
[ $? -ne 0 ] && (echo "backup failed" && exit 1)
echo "Edit the server configuration: "
cat >frps.ini<<EOF
[common]
bind_port = ${PORT}
# this token will be used by clients
token =${TOKEN}
dashboard_port = ${DPORT}
# frp background manager will use this username and password
dashboard_user = ${DUSER}
dashboard_pwd = ${DPASSWD}
enable_prometheus = true
# frp log configuration
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
EOF
echo "Edit finished!"
CONFIGDIR=/etc/frp
if [ ! -d /etc/frp ];then
mkdir -p "${CONFIGDIR}"
[ $? -ne 0 ] && (echo "can not make the configuration path:${CONFIGDIR}" && exit)
fi
cp frps.ini /etc/frp
cp frps /usr/bin
cp systemd/frps.service /usr/lib/systemd/system/
systemctl enable frps
systemctl start frps
firewall-cmd --permanent --add-port=${PORT}/tcp
firewall-cmd --permanent --add-port=${DPORT}/tcp
firewall-cmd --reload
echo "back to the path: ${CURDIR}"
cd ${CURDIR}
echo "Install and start the frp package successfully!"
Execute the script written above as follows , Successful installation frp software package :

Enter :ss -tnlp You can see that the server has listened to the specified tcp port 7000 and 7500

On a computer that can connect to the Internet , Open a browser , Input :<IP Address >:7500,frp The background management client of successfully started :
Be careful : Access needs to be granted in the security group rules of the virtual machine 7000 and 7500 Of TCP Input direction of port .

边栏推荐
- redis发布订阅命令行实现
- MySQL advanced part 1: index
- 打印机脱机时一种容易被忽略的原因
- [2021]GIRAFFE: Representing Scenes as Compositional Generative Neural Feature Fields
- MIT-6874-Deep Learning in the Life Sciences Week 7
- What's wrong with this paragraph that doesn't work? (unresolved)
- Navicat连接Oracle数据库报错ORA-28547或ORA-03135
- Filter the numbers and pick out even numbers from several numbers
- [2020]GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis
- 背包问题 AcWing 9. 分组背包问题
猜你喜欢

Navicat連接Oracle數據庫報錯ORA-28547或ORA-03135

Appium基础 — 使用Appium的第一个Demo

Overview of variable resistors - structure, operation and different applications

博弈论 AcWing 891. Nim游戏

Simple selection sort of selection sort

Appium foundation - use the first demo of appium

Doing SQL performance optimization is really eye-catching

Series of how MySQL works (VIII) 14 figures explain the atomicity of MySQL transactions and the principle of undo logging

MySQL advanced part 1: index

Data visualization chart summary (II)
随机推荐
Records of some tools 2022
高斯消元 AcWing 884. 高斯消元解异或线性方程组
MySQL advanced part 2: the use of indexes
【LeetCode】Easy | 20. Valid parentheses
MySQL advanced part 2: optimizing SQL steps
LeetCode-61
Appium automation test foundation - Summary of appium test environment construction
RGB LED infinite mirror controlled by Arduino
【Rust 笔记】16-输入与输出(下)
Sum of three terms (construction)
NotImplementedError: Cannot convert a symbolic Tensor (yolo_boxes_0/meshgrid/Size_1:0) to a numpy ar
Basic explanation of typescript
LVS简介【暂未完成(半成品)】
Shutter web hardware keyboard monitoring
博弈论 AcWing 891. Nim游戏
[leetcode] day95 effective Sudoku & matrix zeroing
传统数据库逐渐“难适应”,云原生数据库脱颖而出
How to understand the definition of sequence limit?
Niu Mei's math problems
Leetcode-9: palindromes