mirror of
https://github.com/qingchencloud/cftunnel.git
synced 2026-08-29 02:32:37 +08:00
d976ee2c33
- 新增 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 服务端部署方案
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
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
|
||
}
|