tools/frp_one/frp_one.bash
2025-05-26 10:38:07 +08:00

159 lines
4.1 KiB
Bash

#!/bin/bash
echo "欢迎使用 FRP 一键配置脚本!"
echo "请选择您要配置的 FRP 类型:"
echo "1. 配置 frps (FRP 服务器)"
echo "2. 配置 frpc (FRP 客户端)"
read -p "请输入您的选择 (1 或 2): " CHOICE
# ---
# 下载并解压 FRP 的函数
download_frp() {
read -p "请输入您要下载的 FRP 完整下载链接 : " FRP_DOWNLOAD_URL
echo "正在下载 FRP 文件..."
# 使用用户提供的链接下载文件,并将其保存到 /tmp/frp_custom_download.tar.gz
wget -q --show-progress "${FRP_DOWNLOAD_URL}" -O /tmp/frp_custom_download.tar.gz
if [ $? -ne 0 ]; then
echo "错误: 下载文件失败。请检查您的网络连接或下载链接是否正确。"
exit 1
fi
echo "正在创建安装目录 /opt/frp..."
sudo mkdir -p /opt/frp
if [ $? -ne 0 ]; then
echo "错误: 无法创建 /opt/frp 目录。"
exit 1
fi
echo "正在解压 FRP 到 /opt/frp..."
# 解压下载的文件,假设它是 tar.gz 格式,并去除顶层目录
sudo tar -xzf /tmp/frp_custom_download.tar.gz -C /opt/frp/ --strip-components=1
if [ $? -ne 0 ]; then
echo "错误: 解压 FRP 失败。请确保您下载的是正确的 .tar.gz 文件。"
exit 1
fi
sudo rm /tmp/frp_custom_download.tar.gz
echo "FRP 下载并解压成功到 /opt/frp。"
}
# ---
if [ "$CHOICE" == "1" ]; then
echo "---"
echo "您选择了配置 frps (FRP 服务器)。"
echo "---"
download_frp
read -p "请输入 frps 的端口 (例如: 7000): " FRPS_PORT
read -p "请输入一个用于认证的 token (例如: your_secret_token): " FRPS_TOKEN
echo "正在生成 frps.toml 配置文件...日志目录为 /opt/frp.log"
sudo tee /opt/frp/frps.toml > /dev/null <<EOF
bindPort = ${FRPS_PORT}
auth.method = "token"
auth.token = "${FRPS_TOKEN}"
log.to = "/opt/frp.log"
log.level = "info"
log.maxDays = 3
EOF
echo "正在为 frps 创建 systemd 服务..."
sudo tee /etc/systemd/system/frps.service > /dev/null <<EOF
[Unit]
Description = FRP Server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml
Restart = on-failure
RestartSec = 10s
User = root
[Install]
WantedBy = multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
echo "---"
echo "frps 设置完成!"
echo "您可以使用以下命令检查其状态: sudo systemctl status frps"
echo "---"
elif [ "$CHOICE" == "2" ]; then
echo "---"
echo "您选择了配置 frpc (FRP 客户端)。"
echo "---"
download_frp
read -p "请输入 frps 服务器的 IP 地址/主机名: " FRPS_SERVER_ADDR
read -p "请输入 frps 服务器的端口 (例如: 7000): " FRPS_SERVER_PORT
read -p "请输入服务器上使用的认证 token: " FRPC_TOKEN
read -p "请输入要映射的远程端口: " REMOTE_PORT
echo "正在生成 frpc.toml 配置文件...日志目录为 /opt/frp.log"
sudo tee /opt/frp/frpc.toml > /dev/null <<EOF
serverAddr = "${FRPS_SERVER_ADDR}"
serverPort = ${FRPS_SERVER_PORT}
auth.method = "token"
auth.token = "${FRPC_TOKEN}"
log.to = "/opt/frp.log"
log.level = "info"
log.maxDays = 3
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = ${REMOTE_PORT}
EOF
echo "正在为 frpc 创建 systemd 服务..."
sudo tee /etc/systemd/system/frpc.service > /dev/null <<EOF
[Unit]
Description = FRP Client
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml
Restart = on-failure
RestartSec = 10s
User = root
[Install]
WantedBy = multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
echo "---"
echo "frpc 设置完成!"
echo "您可以使用以下命令检查其状态: sudo systemctl status frpc"
echo "---"
else
echo "无效的选择。请重新运行脚本并输入 1 或 2。"
exit 1
fi
echo "脚本执行完毕。"