#!/usr/bin/env bash # 测试服 JSON-RPC 端口外网被封:在本机建 SSH 隧道,供 crm-new 的 bridge 访问。 # # 默认只启动隧道并打印 .env 需要的 4 行配置; # 加 --apply 会自动更新 .env 里的 RPC URL 并重建 bridge。 set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")/.." APPLY=0 [[ "${1:-}" == "--apply" ]] && APPLY=1 NET=$(docker network ls --format '{{.Name}}' | grep -E '^crm-new.*_default$' | head -1 || true) if [[ -z "$NET" ]]; then echo "找不到 crm-new 的 compose 网络,请先启动 stack(docker compose up -d)" >&2 exit 1 fi GW=$(docker network inspect "$NET" -f '{{range .IPAM.Config}}{{.Gateway}}{{end}}') PORTS=(24503 24505 24506 24509) ARGS=() for p in "${PORTS[@]}"; do if ss -ltn "sport = :$p" 2>/dev/null | grep -q "$GW"; then echo "端口 $p 已在 $GW 监听,跳过" else ARGS+=("-L" "$GW:$p:127.0.0.1:$p") fi done if [[ ${#ARGS[@]} -gt 0 ]]; then ssh -F ~/.ssh/config -fN \ -o ExitOnForwardFailure=yes \ -o ServerAliveInterval=30 \ -o ServerAliveCountMax=3 \ "${ARGS[@]}" yw-dev echo "隧道已建立:$GW -> yw-dev 127.0.0.1" fi cat <