#!/bin/bash # FRPC 访问问题修复脚本 # 用于解决 http://156.225.27.52:5245/ 访问问题 HOST="156.225.27.52" PORT="5204" USER="root" PASSWORD="${DEPLOY_SSH_PASSWORD:?set DEPLOY_SSH_PASSWORD}" echo "==========================================" echo "FRPC 访问问题诊断和修复" echo "==========================================" echo "" # 1. 测试 SSH 连接 echo "1. 测试 SSH 连接..." if sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "echo 'SSH连接成功'" 2>/dev/null; then echo "✅ SSH 连接正常" else echo "❌ SSH 连接失败,请检查:" echo " - 服务器是否在线" echo " - SSH 服务是否运行" echo " - 端口 5204 是否开放" exit 1 fi # 2. 检查 FRPC 服务状态 echo "" echo "2. 检查 FRPC 服务状态..." FRPC_STATUS=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "systemctl is-active frpc.service" 2>/dev/null) if [ "$FRPC_STATUS" = "active" ]; then echo "✅ FRPC 服务运行中" else echo "❌ FRPC 服务未运行,正在启动..." sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "systemctl start frpc.service" 2>/dev/null sleep 2 fi # 3. 检查应用状态 echo "" echo "3. 检查应用状态..." APP_STATUS=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "pm2 list | grep ai-chatbot" 2>/dev/null) if [ -n "$APP_STATUS" ]; then echo "✅ 应用运行中" else echo "❌ 应用未运行,请检查 PM2 状态" fi # 4. 检查 FRPC 配置 echo "" echo "4. 检查 FRPC 配置..." FRPC_CONFIG=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "cat /etc/frp/frpc.ini | grep -A 6 'ai-chatbot'" 2>/dev/null) echo "当前配置:" echo "$FRPC_CONFIG" # 5. 修复配置(确保使用 TCP 类型) echo "" echo "5. 修复 FRPC 配置..." sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" << 'ENDSSH' # 备份配置 cp /etc/frp/frpc.ini /etc/frp/frpc.ini.backup.$(date +%Y%m%d_%H%M%S) # 删除旧的 ai-chatbot 配置 sed -i '/\[ai-chatbot\]/,+6d' /etc/frp/frpc.ini # 添加正确的 TCP 配置 cat >> /etc/frp/frpc.ini << 'EOF' [ai-chatbot] name = ai-chatbot type = tcp local_ip = 127.0.0.1 local_port = 3001 remote_port = 5245 EOF echo "配置已更新" cat /etc/frp/frpc.ini | grep -B 2 -A 6 'ai-chatbot' ENDSSH # 6. 重启 FRPC 服务 echo "" echo "6. 重启 FRPC 服务..." sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "systemctl restart frpc.service && sleep 3" 2>/dev/null # 7. 检查 FRPC 日志 echo "" echo "7. 检查 FRPC 日志..." sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "journalctl -u frpc.service --since '1 minute ago' --no-pager | grep -E 'ai-chatbot|start proxy|error' | tail -10" 2>/dev/null # 8. 测试本地应用 echo "" echo "8. 测试本地应用..." LOCAL_TEST=$(sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "curl -s --max-time 5 http://localhost:3001 2>&1 | head -5" 2>/dev/null) if [ -n "$LOCAL_TEST" ]; then echo "✅ 本地应用响应正常" echo "$LOCAL_TEST" else echo "❌ 本地应用无响应" fi # 9. 检查端口监听 echo "" echo "9. 检查端口监听..." sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p "$PORT" "$USER@$HOST" "ss -tlnp | grep -E '3001|5245' || netstat -tlnp 2>/dev/null | grep -E '3001|5245'" 2>/dev/null echo "" echo "==========================================" echo "诊断完成" echo "==========================================" echo "" echo "如果问题仍然存在,请检查:" echo "1. FRPS(FRP 服务端)是否正常运行" echo "2. FRPS 是否配置了 5245 端口的 TCP 穿透" echo "3. 防火墙是否开放了 5245 端口" echo "4. 访问时使用完整 URL: http://156.225.27.52:5245/" echo ""