当前位置:网站首页>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 .
边栏推荐
- [BMZCTF-pwn] ectf-2014 seddit
- SQLMAP使用教程(一)
- 【Rust 笔记】16-输入与输出(下)
- Traversal of leetcode tree
- Leetcode heap correlation
- Overview of variable resistors - structure, operation and different applications
- SPI details
- Network security skills competition in Secondary Vocational Schools -- a tutorial article on middleware penetration testing in Guangxi regional competition
- 【Rust 笔记】14-集合(上)
- How to generate an image from text on fly at runtime
猜你喜欢
LeetCode 0108. Convert an ordered array into a binary search tree - the median of the array is the root, and the left and right of the median are the left and right subtrees respectively
MySQL advanced part 2: the use of indexes
Appium基础 — 使用Appium的第一个Demo
Erreur de connexion Navicat à la base de données Oracle Ora - 28547 ou Ora - 03135
Appium automation test foundation - Summary of appium test environment construction
Groupbykey() and reducebykey() and combinebykey() in spark
liunx启动redis
MIT-6874-Deep Learning in the Life Sciences Week 7
传统数据库逐渐“难适应”,云原生数据库脱颖而出
Chapter 6 relational database theory
随机推荐
阿里新成员「瓴羊」正式亮相,由阿里副总裁朋新宇带队,集结多个核心部门技术团队
数据可视化图表总结(二)
1.13 - RISC/CISC
927. 三等分 模拟
MIT-6874-Deep Learning in the Life Sciences Week 7
A reason that is easy to be ignored when the printer is offline
Leetcode-22: bracket generation
Basic explanation of typescript
1039 Course List for Student
Shutter web hardware keyboard monitoring
SPI 详解
高斯消元 AcWing 884. 高斯消元解异或线性方程组
Applicable to Net free barcode API [off] - free barcode API for NET [closed]
Sqlmap tutorial (II) practical skills I
Filter the numbers and pick out even numbers from several numbers
Leetcode-6110: number of incremental paths in the grid graph
Gaussian elimination acwing 884 Gauss elimination for solving XOR linear equations
What is socket? Basic introduction to socket
One question per day 1020 Number of enclaves
Single chip computer engineering experience - layered idea