This commit is contained in:
eddy
2025-11-07 10:43:40 +08:00
parent 0f07fd9628
commit fac9d423ca
3 changed files with 317 additions and 0 deletions

Binary file not shown.

10
frpc/frpc.toml Normal file
View File

@@ -0,0 +1,10 @@
[common]
server_addr = 8.218.134.198
server_port = 8041
token = PAioH8syP!82T%
[nely]
type = tcp
local_ip = 127.0.0.1
local_port = 34252
remote_port = 34252

307
frpc/install_frpc.sh Normal file
View File

@@ -0,0 +1,307 @@
#!/bin/bash
# FRP Client 一键安装脚本
# 自动解压、配置和安装 frpc
# 使用方法: chmod +x install_frpc.sh && ./install_frpc.sh
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查是否为root用户
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "此脚本需要root权限运行"
exit 1
fi
}
# 检查文件是否存在
check_files() {
if [[ ! -f "frp_0.64.0_linux_amd64.tar.gz" ]]; then
log_error "找不到 frp_0.64.0_linux_amd64.tar.gz 文件"
exit 1
fi
if [[ ! -f "frpc.toml" ]]; then
log_error "找不到 frpc.toml 配置文件"
exit 1
fi
}
# 创建frp用户
create_frp_user() {
if ! id "frp" &>/dev/null; then
log_info "创建 frp 用户..."
useradd -r -s /bin/false frp
else
log_info "frp 用户已存在"
fi
}
# 解压安装包
extract_archive() {
log_info "解压 frp_0.64.0_linux_amd64.tar.gz..."
# 创建临时目录
TEMP_DIR=$(mktemp -d)
# 解压到临时目录
tar -xzf frp_0.64.0_linux_amd64.tar.gz -C "$TEMP_DIR"
# 创建安装目录
mkdir -p /root/frpc
# 复制文件
cp "$TEMP_DIR"/frp_0.64.0_linux_amd64/frpc /root/frpc/
# 清理临时目录
rm -rf "$TEMP_DIR"
# 设置权限 - root目录需要特殊权限处理
chmod 755 /root # 确保frp用户可以访问root目录
chown -R root:frp /root/frpc
chmod 750 /root/frpc
chmod +x /root/frpc/frpc
log_info "frpc 已安装到 /root/frpc/"
}
# 配置frpc
configure_frpc() {
log_info "配置 frpc..."
# 复制配置文件
cp frpc.toml /root/frpc/
chown root:frp /root/frpc/frpc.toml
chmod 640 /root/frpc/frpc.toml
log_info "配置文件已复制到 /root/frpc/frpc.toml"
}
# 创建systemd服务
create_service() {
log_info "创建 systemd 服务..."
cat > /etc/systemd/system/frpc.service << 'EOF'
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=frp
Restart=on-failure
RestartSec=5s
ExecStart=/root/frpc/frpc -c /root/frpc/frpc.toml
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5s
[Install]
WantedBy=multi-user.target
EOF
# 重新加载systemd
systemctl daemon-reload
log_info "systemd 服务已创建"
}
# 启动服务
start_service() {
log_info "启动 frpc 服务..."
# 启用开机自启
systemctl enable frpc
# 启动服务
systemctl start frpc
# 检查服务状态
if systemctl is-active --quiet frpc; then
log_info "frpc 服务启动成功"
else
log_error "frpc 服务启动失败"
log_error "请检查日志: journalctl -u frpc -f"
exit 1
fi
}
# 显示状态信息
show_status() {
log_info "安装完成!"
echo ""
echo "服务状态:"
systemctl status frpc --no-pager
echo ""
echo "常用命令:"
echo " 启动服务: systemctl start frpc"
echo " 停止服务: systemctl stop frpc"
echo " 重启服务: systemctl restart frpc"
echo " 查看状态: systemctl status frpc"
echo " 查看日志: journalctl -u frpc -f"
echo ""
echo "配置文件位置: /root/frpc/frpc.toml"
echo "程序位置: /root/frpc/frpc"
}
# 交互式服务管理菜单
interactive_menu() {
while true; do
echo ""
echo "==============================================="
echo " FRP Client 服务管理"
echo "==============================================="
echo "1. 启动服务 (start)"
echo "2. 停止服务 (stop)"
echo "3. 重启服务 (restart)"
echo "4. 查看状态 (status)"
echo "5. 查看日志 (logs)"
echo "6. 查看配置文件 (config)"
echo "7. 编辑配置文件 (edit)"
echo "8. 卸载服务 (uninstall)"
echo "0. 退出 (exit)"
echo "==============================================="
read -p "请选择操作 [0-8]: " choice
case $choice in
1|start)
log_info "启动 frpc 服务..."
systemctl start frpc
if systemctl is-active --quiet frpc; then
log_info "服务启动成功"
else
log_error "服务启动失败"
fi
systemctl status frpc --no-pager
;;
2|stop)
log_info "停止 frpc 服务..."
systemctl stop frpc
log_info "服务已停止"
;;
3|restart)
log_info "重启 frpc 服务..."
systemctl restart frpc
if systemctl is-active --quiet frpc; then
log_info "服务重启成功"
else
log_error "服务重启失败"
fi
systemctl status frpc --no-pager
;;
4|status)
echo "服务状态:"
systemctl status frpc --no-pager
;;
5|logs)
log_info "查看服务日志 (按 Ctrl+C 退出):"
sleep 1
journalctl -u frpc -f
;;
6|config)
echo "配置文件内容:"
echo "----------------------------------------"
cat /root/frpc/frpc.toml
echo "----------------------------------------"
;;
7|edit)
log_info "编辑配置文件..."
if command -v nano >/dev/null 2>&1; then
nano /root/frpc/frpc.toml
elif command -v vi >/dev/null 2>&1; then
vi /root/frpc/frpc.toml
else
log_error "未找到文本编辑器,请手动编辑: /root/frpc/frpc.toml"
fi
read -p "是否重启服务使配置生效? [y/N]: " restart_choice
if [[ $restart_choice =~ ^[Yy]$ ]]; then
systemctl restart frpc
log_info "服务已重启"
fi
;;
8|uninstall)
read -p "确定要卸载 frpc 服务吗? [y/N]: " confirm
if [[ $confirm =~ ^[Yy]$ ]]; then
log_warn "正在卸载 frpc 服务..."
systemctl stop frpc 2>/dev/null || true
systemctl disable frpc 2>/dev/null || true
rm -f /etc/systemd/system/frpc.service
systemctl daemon-reload
rm -rf /root/frpc
userdel -r frp 2>/dev/null || true
log_info "frpc 服务已完全卸载"
exit 0
else
log_info "取消卸载操作"
fi
;;
0|exit|quit|q)
log_info "退出管理界面"
exit 0
;;
*)
log_error "无效选择,请输入 0-8 或对应命令"
;;
esac
read -p "按回车键继续..."
done
}
# 主函数
main() {
# 检查是否为管理模式
if [[ "$1" == "manage" || "$1" == "menu" || "$1" == "-m" ]]; then
interactive_menu
return
fi
log_info "开始安装 FRP Client..."
check_root
check_files
create_frp_user
extract_archive
configure_frpc
create_service
start_service
show_status
echo ""
log_info "FRP Client 安装完成!"
# 询问是否进入交互管理界面
read -p "是否进入交互式管理界面? [y/N]: " enter_menu
if [[ $enter_menu =~ ^[Yy]$ ]]; then
interactive_menu
else
echo ""
log_info "可使用以下命令管理服务:"
echo " ./install_frpc.sh manage # 进入交互管理界面"
echo " systemctl [start|stop|restart|status] frpc"
fi
}
# 运行主函数
main "$@"