Files
晴天 d976ee2c33 feat: relay 模式 + SSH 远程部署 + 官网移动端适配 + 国内镜像源
- 新增 relay 模式: frp 中继引擎,TCP/UDP 全协议穿透
- 新增 relay server setup: SSH 远程安装 frps 服务端
- 新增 sshutil 包: 纯 Go SSH 连接/远程执行
- 官网: 移动端响应式适配 (480/768/900px 三断点)
- 官网: 修复 Star 按钮样式,特性卡片 11→12
- install.sh: 国内镜像源加速 (ghfast/gh-proxy/ghproxy)
- Docker Compose + install-relay.sh 服务端部署方案
2026-02-26 22:29:56 +08:00

58 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package cmd
import (
"fmt"
"strings"
"github.com/qingchencloud/cftunnel/internal/daemon"
"github.com/qingchencloud/cftunnel/internal/relay"
"github.com/spf13/cobra"
)
var (
quickAuth string
quickRelay bool
quickProto string
)
func init() {
quickCmd.Flags().StringVar(&quickAuth, "auth", "", "启用密码保护 (格式: 用户名:密码)")
quickCmd.Flags().BoolVar(&quickRelay, "relay", false, "使用中继模式穿透(需先 relay init")
quickCmd.Flags().StringVar(&quickProto, "proto", "tcp", "中继协议 (tcp/udp),仅 --relay 时有效")
rootCmd.AddCommand(quickCmd)
}
var quickCmd = &cobra.Command{
Use: "quick <端口>",
Short: "快速启动免域名隧道(生成 *.trycloudflare.com 随机域名)",
Long: "无需 Cloudflare 账户、API Token 或域名,一条命令生成临时公网地址。\n适合临时分享、快速调试,Ctrl+C 退出后域名自动失效。",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
if quickRelay {
return relay.StartQuick(args[0], quickProto)
}
if quickAuth != "" {
user, pass, err := parseAuth(quickAuth)
if err != nil {
return err
}
return daemon.StartQuickWithAuth(args[0], user, pass)
}
return daemon.StartQuick(args[0])
},
}
// parseAuth 解析 "用户名:密码" 格式,密码部分允许包含冒号
func parseAuth(s string) (string, string, error) {
idx := strings.Index(s, ":")
if idx < 0 {
return "", "", fmt.Errorf("--auth 格式错误,应为 用户名:密码")
}
user := s[:idx]
pass := s[idx+1:]
if user == "" || pass == "" {
return "", "", fmt.Errorf("--auth 用户名和密码不能为空")
}
return user, pass, nil
}