aihuashanying commited on
Commit
386b079
·
1 Parent(s): 34f70c9

修复不能push的问题

Browse files
GIT_PUSH_FIX.md ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Git Push 到 Hugging Face 问题修复指南
2
+
3
+ ## 问题描述
4
+ ```
5
+ Connection closed by 198.18.0.7 port 22
6
+ fatal: Could not read from remote repository.
7
+ ```
8
+
9
+ ## 快速解决方案(推荐)
10
+
11
+ ### 方案 1: 切换到 HTTPS(最简单,推荐)
12
+
13
+ 1. **查看当前远程仓库 URL:**
14
+ ```bash
15
+ git remote -v
16
+ ```
17
+
18
+ 2. **将 SSH URL 切换为 HTTPS URL:**
19
+ ```bash
20
+ # 格式:git remote set-url origin https://huggingface.co/spaces/USERNAME/SPACE_NAME
21
+ # 例如:
22
+ git remote set-url origin https://huggingface.co/spaces/your-username/your-space-name
23
+ ```
24
+
25
+ 3. **使用 Hugging Face token 进行认证:**
26
+ - 访问 https://huggingface.co/settings/tokens
27
+ - 创建一个新的 token(需要有 write 权限)
28
+ - push 时使用 token 作为密码:
29
+ ```bash
30
+ git push
31
+ # Username: 你的 Hugging Face 用户名
32
+ # Password: 你的 token(不是密码)
33
+ ```
34
+
35
+ ### 方案 2: 修复 SSH 配置
36
+
37
+ 如果必须使用 SSH,按以下步骤操作:
38
+
39
+ 1. **检查 SSH key 是否存在:**
40
+ ```bash
41
+ ls -la ~/.ssh/
42
+ ```
43
+
44
+ 2. **如果没有 SSH key,生成一个:**
45
+ ```bash
46
+ ssh-keygen -t ed25519 -C "[email protected]"
47
+ # 按 Enter 使用默认路径
48
+ ```
49
+
50
+ 3. **查看公钥并添加到 Hugging Face:**
51
+ ```bash
52
+ cat ~/.ssh/id_ed25519.pub
53
+ ```
54
+ - 复制输出的内容
55
+ - 访问 https://huggingface.co/settings/keys
56
+ - 点击 "New SSH key",粘贴公钥并保存
57
+
58
+ 4. **创建或编辑 SSH 配置文件:**
59
+ ```bash
60
+ nano ~/.ssh/config
61
+ ```
62
+
63
+ 添加以下内容:
64
+ ```
65
+ Host hf.co
66
+ HostName hf.co
67
+ User git
68
+ Port 22
69
+ IdentityFile ~/.ssh/id_ed25519
70
+ IdentitiesOnly yes
71
+ ```
72
+
73
+ 5. **设置正确的文件权限:**
74
+ ```bash
75
+ chmod 600 ~/.ssh/config
76
+ chmod 600 ~/.ssh/id_ed25519
77
+ chmod 644 ~/.ssh/id_ed25519.pub
78
+ ```
79
+
80
+ 6. **测试 SSH 连接:**
81
+ ```bash
82
83
+ ```
84
+ 应该看到类似 "You've successfully authenticated" 的消息
85
+
86
+ ### 方案 3: 使用 SSH over HTTPS 端口(如果端口 22 被防火墙阻止)
87
+
88
+ 如果端口 22 被阻止,可以尝试使用端口 443:
89
+
90
+ 1. **编辑 SSH 配置:**
91
+ ```bash
92
+ nano ~/.ssh/config
93
+ ```
94
+
95
+ 添加或修改为:
96
+ ```
97
+ Host hf.co
98
+ HostName hf.co
99
+ User git
100
+ Port 443
101
+ IdentityFile ~/.ssh/id_ed25519
102
+ IdentitiesOnly yes
103
+ ```
104
+
105
+ 2. **测试连接:**
106
+ ```bash
107
108
+ ```
109
+
110
+ ## 诊断步骤
111
+
112
+ 运行诊断脚本:
113
+ ```bash
114
+ chmod +x fix_git_push.sh
115
+ ./fix_git_push.sh
116
+ ```
117
+
118
+ ## 常见问题
119
+
120
+ ### Q: 如何找到我的 Hugging Face 空间名称?
121
+ A: 查看当前远程 URL:
122
+ ```bash
123
+ git remote -v
124
+ ```
125
+ 或者访问 https://huggingface.co/spaces 查看你的空间列表
126
+
127
+ ### Q: 如何生成新的 SSH key?
128
+ A:
129
+ ```bash
130
+ ssh-keygen -t ed25519 -C "[email protected]"
131
+ ```
132
+
133
+ ### Q: 如何查看已添加的 SSH key?
134
+ A:
135
+ ```bash
136
+ cat ~/.ssh/id_ed25519.pub
137
+ ```
138
+
139
+ ### Q: HTTPS 方式需要每次都输入 token 吗?
140
+ A: 可以配置 Git credential helper 来保存凭据:
141
+ ```bash
142
+ git config --global credential.helper store
143
+ ```
144
+
145
+ ## 推荐做法
146
+
147
+ 对于大多数用户,**使用 HTTPS + token** 是最简单可靠的方式,因为:
148
+ - 不需要配置 SSH
149
+ - 不受防火墙端口限制
150
+ - 更容易调试
151
+ - Hugging Face 官方推荐
152
+
check_clash_rules.sh ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 检查 Clash Verge 配置建议 ==="
4
+ echo ""
5
+
6
+ echo "如果 TUN 模式下 SSH 连接仍然失败,可能的原因:"
7
+ echo ""
8
+ echo "1. Clash Verge 规则问题"
9
+ echo " - 检查 Clash Verge 的规则设置"
10
+ echo " - 确保 hf.co 或 [email protected] 的连接被允许"
11
+ echo " - 可能需要添加规则允许 SSH 流量"
12
+ echo ""
13
+ echo "2. TUN 模式配置"
14
+ echo " - 确认虚拟网卡模式已启用"
15
+ echo " - 检查 TUN 模式是否正确处理所有流量"
16
+ echo ""
17
+ echo "3. 尝试在 Clash Verge 中添加规则"
18
+ echo " - 在规则中添加: DOMAIN-SUFFIX,hf.co,PROXY"
19
+ echo " - 或者添加: IP-CIDR,198.18.0.0/16,PROXY"
20
+ echo ""
21
+ echo "4. 检查 Clash Verge 日志"
22
+ echo " - 打开 Clash Verge -> 日志"
23
+ echo " - 查看是否有 hf.co 相关的连接记录"
24
+ echo " - 查看是否有错误信息"
25
+ echo ""
26
+ echo "5. 临时测试:禁用规则"
27
+ echo " - 在 Clash Verge 中临时设置为全局代理模式"
28
+ echo " - 测试 SSH 连接是否成功"
29
+ echo " - 如果成功,说明是规则问题"
30
+ echo ""
31
+
check_clash_tun_ssh.sh ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 检查 Clash Verge TUN 模式对 SSH 的支持 ==="
4
+ echo ""
5
+
6
+ echo "问题:TCP 连接成功,但 SSH banner exchange 超时"
7
+ echo ""
8
+ echo "可能的原因:"
9
+ echo "1. TUN 模式可能没有正确处理 SSH 协议"
10
+ echo "2. Clash Verge 的规则可能影响了 SSH 流量"
11
+ echo "3. 需要检查 Clash Verge 的 TUN 模式配置"
12
+ echo ""
13
+
14
+ echo "=== 检查步骤 ==="
15
+ echo ""
16
+ echo "1. 查看 Clash Verge 日志"
17
+ echo " - 打开 Clash Verge"
18
+ echo " - 点击 '日志' 图标"
19
+ echo " - 尝试 SSH 连接: ssh -T [email protected]"
20
+ echo " - 查看日志中是否有 hf.co 或 198.18.0.12 的连接记录"
21
+ echo " - 查看是否有错误信息"
22
+ echo ""
23
+
24
+ echo "2. 检查 Clash Verge TUN 模式设置"
25
+ echo " - 打开 Clash Verge 设置"
26
+ echo " - 确认 '虚拟网卡模式' 已启用"
27
+ echo " - 检查是否有 TUN 相关的其他设置"
28
+ echo ""
29
+
30
+ echo "3. 临时测试:全局代理模式"
31
+ echo " - 在 Clash Verge 中设置为 '全局代理' 模式"
32
+ echo " - 测试 SSH: ssh -T [email protected]"
33
+ echo " - 如果成功,说明是规则问题"
34
+ echo ""
35
+
36
+ echo "4. 检查规则配置"
37
+ echo " - 确保 rules 中有: DOMAIN-SUFFIX,hf.co,PROXY"
38
+ echo " - 或者: IP-CIDR,198.18.0.12/32,PROXY"
39
+ echo " - 规则要放在列表顶部"
40
+ echo ""
41
+
42
+ echo "5. 尝试不同的 SSH 配置"
43
+ echo " - 运行: ./fix_ssh_banner_timeout.sh"
44
+ echo " - 这个脚本会尝试多种配置方案"
45
+ echo ""
46
+
47
+ echo "=== 如果 TUN 模式确实不支持 SSH ==="
48
+ echo ""
49
+ echo "可能需要:"
50
+ echo "1. 使用显式代理(通过 ProxyCommand)"
51
+ echo "2. 或者使用 HTTPS + token 方式(虽然你不想用)"
52
+ echo "3. 或者检查 Clash Verge 是否有 SSH 相关的特殊设置"
53
+ echo ""
54
+
check_git_config.sh ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 检查 Git 配置和远程仓库 ==="
4
+ echo ""
5
+
6
+ echo "1. 检查当前远程仓库配置:"
7
+ git remote -v
8
+ echo ""
9
+
10
+ echo "2. 检查当前分支:"
11
+ git branch -a
12
+ echo ""
13
+
14
+ echo "3. 检查 Git 配置:"
15
+ git config --list | grep -E "(remote|user|url)" | head -10
16
+ echo ""
17
+
18
+ echo "4. 测试远程仓库连接:"
19
+ REMOTE_URL=$(git config --get remote.origin.url)
20
+ if [ -n "$REMOTE_URL" ]; then
21
+ echo "远程 URL: $REMOTE_URL"
22
+ echo ""
23
+
24
+ # 检查是否是 SSH URL
25
+ if echo "$REMOTE_URL" | grep -q "^git@"; then
26
+ echo "✓ 使用 SSH URL"
27
+ REMOTE_HOST=$(echo "$REMOTE_URL" | sed -E 's|git@([^:]+):.*|\1|')
28
+ echo "远程主机: $REMOTE_HOST"
29
+
30
+ # 测试 SSH 连接
31
+ echo ""
32
+ echo "测试 SSH 连接到远程主机..."
33
+ ssh -T git@$REMOTE_HOST 2>&1 | head -5
34
+ else
35
+ echo "使用 HTTPS URL: $REMOTE_URL"
36
+ fi
37
+ else
38
+ echo "✗ 未找到远程仓库配置"
39
+ fi
40
+ echo ""
41
+
42
+ echo "5. 检查是否有未推送的提交:"
43
+ git status
44
+ echo ""
45
+
46
+ echo "6. 检查最近的提交:"
47
+ git log --oneline -5
48
+ echo ""
49
+
50
+ echo "=== 可能的问题 ==="
51
+ echo ""
52
+ echo "如果远程仓库 URL 不正确,需要更新:"
53
+ echo " git remote set-url origin [email protected]:spaces/YOUR_USERNAME/YOUR_SPACE_NAME"
54
+ echo ""
55
+ echo "或者检查:"
56
+ echo "1. 远程仓库是否存在"
57
+ echo "2. 是否有写权限"
58
+ echo "3. 分支名称是否正确"
59
+
check_profiles_config.sh ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 检查 Clash Verge 配置文件结构 ==="
4
+ echo ""
5
+
6
+ echo "根据你的文件列表,需要检查以下内容:"
7
+ echo ""
8
+
9
+ echo "1. profiles.yaml 文件"
10
+ echo " 这个文件可能指定了当前使用的配置文件"
11
+ echo " 打开它查看 'current' 字段"
12
+ echo ""
13
+
14
+ echo "2. profiles/ 文件夹"
15
+ echo " 实际使用的配置文件通常在这里"
16
+ echo " 需要进入这个文件夹找到当前使用的配置"
17
+ echo ""
18
+
19
+ echo "=== 操作步骤 ==="
20
+ echo ""
21
+ echo "步骤 1: 打开 profiles.yaml"
22
+ echo " 查看当前激活的配置名称"
23
+ echo ""
24
+ echo "步骤 2: 进入 profiles/ 文件夹"
25
+ echo " 找到对应的配置文件"
26
+ echo ""
27
+ echo "步骤 3: 编辑那个配置文件"
28
+ echo " 在 rules: 部分顶部添加:"
29
+ echo ""
30
+ echo " rules:"
31
+ echo " - DOMAIN-SUFFIX,hf.co,PROXY"
32
+ echo " - IP-CIDR,198.18.0.69/32,PROXY"
33
+ echo ""
34
+ echo "步骤 4: 保存并重新加载"
35
+ echo " 在 Clash Verge 中重新加载配置"
36
+ echo ""
37
+
38
+ echo "=== 如果使用订阅配置 ==="
39
+ echo ""
40
+ echo "如果配置文件是从订阅下载的,修改后可能会被覆盖。"
41
+ echo ""
42
+ echo "解决方案:"
43
+ echo "1. 修改配置文件后,在 Clash Verge 中禁用该订阅的自动更新"
44
+ echo "2. 或者创建本地配置,基于订阅配置但添加自定义规则"
45
+ echo "3. 或者使用 Clash Verge 的规则编辑功能(如果有)"
46
+ echo ""
47
+
check_proxy.sh ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 检查 Clash Verge 代理配置 ==="
4
+ echo ""
5
+
6
+ # 1. 检查网络接口
7
+ echo "1. 网络接口信息:"
8
+ ip addr show | grep -E "^[0-9]+:|inet " | head -10
9
+ echo ""
10
+
11
+ # 2. 检查路由
12
+ echo "2. 默认路由:"
13
+ ip route show | grep default
14
+ echo ""
15
+
16
+ # 3. 检测 Windows 主机 IP
17
+ WSL_HOST_IP=$(ip route show | grep -i default | awk '{ print $3}' | head -1)
18
+ echo "3. WSL 网关 IP(Windows 主机): $WSL_HOST_IP"
19
+ echo ""
20
+
21
+ # 4. 测试 Clash 端口
22
+ echo "4. 测试 Clash 代理端口:"
23
+ for port in 7897 7890 7891 1080; do
24
+ if timeout 2 bash -c "echo > /dev/tcp/$WSL_HOST_IP/$port" 2>/dev/null; then
25
+ echo " ✓ 端口 $port 可达"
26
+ if [ $port -eq 7897 ]; then
27
+ echo " 这是 Clash 混合代理端口(支持 HTTP 和 SOCKS5)"
28
+ elif [ $port -eq 7890 ]; then
29
+ echo " 这可能是 Clash HTTP 代理端口"
30
+ elif [ $port -eq 7891 ]; then
31
+ echo " 这可能是 Clash SOCKS5 代理端口"
32
+ fi
33
+ else
34
+ echo " ✗ 端口 $port 不可达"
35
+ fi
36
+ done
37
+ echo ""
38
+
39
+ # 5. 检查环境变量
40
+ echo "5. 代理环境变量:"
41
+ echo " http_proxy: ${http_proxy:-未设置}"
42
+ echo " https_proxy: ${https_proxy:-未设置}"
43
+ echo " HTTP_PROXY: ${HTTP_PROXY:-未设置}"
44
+ echo " HTTPS_PROXY: ${HTTPS_PROXY:-未设置}"
45
+ echo " all_proxy: ${all_proxy:-未设置}"
46
+ echo " ALL_PROXY: ${ALL_PROXY:-未设置}"
47
+ echo ""
48
+
49
+ # 6. 测试 HTTP 连接
50
+ echo "6. 测试 HTTP 连接(通过代理):"
51
+ if [ -n "$http_proxy" ] || [ -n "$HTTP_PROXY" ]; then
52
+ PROXY_URL=${http_proxy:-$HTTP_PROXY}
53
+ echo " 使用代理: $PROXY_URL"
54
+ curl -s --connect-timeout 5 --proxy "$PROXY_URL" https://www.google.com > /dev/null 2>&1
55
+ if [ $? -eq 0 ]; then
56
+ echo " ✓ HTTP 代理工作正常"
57
+ else
58
+ echo " ✗ HTTP 代理连接失败"
59
+ fi
60
+ else
61
+ echo " 未设置代理环境变量,测试直连..."
62
+ curl -s --connect-timeout 5 https://www.google.com > /dev/null 2>&1
63
+ if [ $? -eq 0 ]; then
64
+ echo " ✓ 直连成功(可能通过 TUN 模式自动代理)"
65
+ else
66
+ echo " ✗ 连接失败"
67
+ fi
68
+ fi
69
+ echo ""
70
+
71
+ # 7. 测试 hf.co 连接
72
+ echo "7. 测试 hf.co 连接:"
73
+ timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null
74
+ if [ $? -eq 0 ]; then
75
+ echo " ✓ hf.co:443 可达"
76
+ else
77
+ echo " ✗ hf.co:443 不可达"
78
+ fi
79
+ echo ""
80
+
81
+ # 8. 检查 SSH 配置
82
+ echo "8. SSH 配置:"
83
+ if [ -f ~/.ssh/config ]; then
84
+ echo " hf.co 配置:"
85
+ grep -A 10 "Host hf.co" ~/.ssh/config || echo " 未找到 hf.co 配置"
86
+ else
87
+ echo " ~/.ssh/config 不存在"
88
+ fi
89
+
check_windows_firewall.md ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Windows 防火墙检查指南
2
+
3
+ 如果 WSL 无法访问 Clash Verge 的代理端口,可能是 Windows 防火墙阻止了连接。
4
+
5
+ ## 检查步骤
6
+
7
+ 1. **打开 Windows 防火墙设置**
8
+ - 按 `Win + R`,输入 `wf.msc`,回车
9
+
10
+ 2. **检查入站规则**
11
+ - 查看是否有规则阻止端口 7897
12
+ - 或者添加新规则允许端口 7897
13
+
14
+ 3. **临时测试:关闭防火墙**
15
+ - 仅用于测试,确认是否是防火墙问题
16
+ - 如果关闭防火墙后可以连接,说明需要配置防火墙规则
17
+
18
+ 4. **添加防火墙规则(推荐)**
19
+ - 允许 Clash Verge 通过防火墙
20
+ - 或者允许端口 7897 的入站连接
21
+
22
+ ## Clash Verge 设置检查
23
+
24
+ 1. **启用局域网连接**
25
+ - 设置 -> Clash 设置 -> 局域网连接
26
+ - 必须启用此选项,WSL 才能访问代理端口
27
+
28
+ 2. **确认端口配置**
29
+ - 混合代理端口:7897(已启用)
30
+ - 确保已保存设置
31
+
32
+ 3. **重启 Clash Verge**
33
+ - 修改设置后,建议重启 Clash Verge
34
+
clash_config_guide.md ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Clash Verge 配置文件编辑指南
2
+
3
+ ## 问题:规则无法保存
4
+
5
+ 如果通过界面修改规则后重启应用规则消失,说明规则没有保存到配置文件中。需要直接编辑配置文件。
6
+
7
+ ## 步骤 1: 找到配置文件
8
+
9
+ ### 方法 A: 通过 Clash Verge 界面
10
+
11
+ 1. 打开 Clash Verge
12
+ 2. 点击 **"设置"**
13
+ 3. 找到以下任一选项:
14
+ - **"配置目录"** (Config Directory)
15
+ - **"当前配置"** (Current Config)
16
+ - **"Profiles"**
17
+ 4. 记下显示的路径
18
+
19
+ ### 方法 B: 默认路径
20
+
21
+ Clash Verge 的配置文件通常在:
22
+
23
+ ```
24
+ C:\Users\你的用户名\.config\clash-verge\profiles\
25
+ ```
26
+
27
+
28
+
29
+ ```
30
+ C:\Users\你的用户名\AppData\Roaming\clash-verge\profiles\
31
+ ```
32
+
33
+ ## 步骤 2: 找到当前使用的配置文件
34
+
35
+ 1. 进入配置目录
36
+ 2. 找到当前使用的配置文件(通常是 `.yaml` 或 `.yml` 文件)
37
+ 3. 可以通过文件修改时间判断哪个是当前使用的
38
+
39
+ ## 步骤 3: 编辑配置文件
40
+
41
+ ### 用文本编辑器打开配置文件
42
+
43
+ 推荐使用:
44
+ - **VS Code**
45
+ - **Notepad++**
46
+ - **Windows 记事本**(也可以,但要注意格式)
47
+
48
+ ### 找到 rules 部分
49
+
50
+ 在配置文件中找到 `rules:` 部分,通常格式如下:
51
+
52
+ ```yaml
53
+ rules:
54
+ - GEOIP,CN,DIRECT
55
+ - MATCH,PROXY
56
+ ```
57
+
58
+ ### 添加规则
59
+
60
+ 在 `rules:` 列表的**最顶部**添加以下规则:
61
+
62
+ ```yaml
63
+ rules:
64
+ # Hugging Face 相关规则(放在最前面)
65
+ - DOMAIN-SUFFIX,hf.co,PROXY
66
+ - IP-CIDR,198.18.0.69/32,PROXY
67
+ - IP-CIDR,198.18.0.0/16,PROXY
68
+
69
+ # 其他现有规则
70
+ - GEOIP,CN,DIRECT
71
+ - MATCH,PROXY
72
+ ```
73
+
74
+ ### 重要提示
75
+
76
+ 1. **YAML 格式要求**:
77
+ - 使用空格缩进,不要用 Tab
78
+ - 每个规则前要有 `- `(短横线和空格)
79
+ - 冒号后要有空格
80
+
81
+ 2. **规则顺序**:
82
+ - 特定规则(如 hf.co)要放在通用规则(如 GEOIP)之前
83
+ - 规则按顺序匹配,第一个匹配的生效
84
+
85
+ 3. **保存文件**:
86
+ - 保存为 UTF-8 编码
87
+ - 确保文件扩展名是 `.yaml` 或 `.yml`
88
+
89
+ ## 步骤 4: 重新加载配置
90
+
91
+ 编辑并保存配置文件后:
92
+
93
+ 1. 在 Clash Verge 中点击 **"重新加载配置"** 或 **"Reload"**
94
+ 2. 或者重启 Clash Verge
95
+ 3. 检查规则是否生效
96
+
97
+ ## 步骤 5: 验证规则
98
+
99
+ 1. 查看 Clash Verge 的 **"日志"** 页面
100
+ 2. 尝试连接 hf.co
101
+ 3. 在日志中应该能看到规则匹配记录
102
+
103
+ ## 完整示例
104
+
105
+ 一个完整的 rules 部分示例:
106
+
107
+ ```yaml
108
+ rules:
109
+ # Hugging Face
110
+ - DOMAIN-SUFFIX,hf.co,PROXY
111
+ - DOMAIN-SUFFIX,huggingface.co,PROXY
112
+ - IP-CIDR,198.18.0.0/16,PROXY
113
+
114
+ # 国内直连
115
+ - GEOIP,CN,DIRECT
116
+
117
+ # 其他规则...
118
+
119
+ # 默认代理
120
+ - MATCH,PROXY
121
+ ```
122
+
123
+ ## 常见问题
124
+
125
+ ### Q: 编辑后配置无法加载?
126
+ A: 检查 YAML 格式是否正确,特别是缩进和标点符号。
127
+
128
+ ### Q: 规则不生效?
129
+ A: 确保规则放在列表顶部,并且格式正确。
130
+
131
+ ### Q: 找不到配置文件?
132
+ A: 在 Clash Verge 设置中查看配置目录路径,或者查看应用日志。
133
+
134
+ ### Q: 修改后规则还是消失?
135
+ A: 确保编辑的是 Clash Verge 当前使用的配置文件,不是备份文件。
136
+
137
+ ## 备份建议
138
+
139
+ 在编辑配置文件前,建议先备份:
140
+
141
+ 1. 复制配置文件
142
+ 2. 重命名为 `.yaml.bak`
143
+ 3. 然后编辑原文件
144
+
145
+ 这样如果出错可以恢复。
146
+
clash_verge_rules_guide.md ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Clash Verge 规则配置指南
2
+
3
+ ## 方法 1: 通过界面添加规则(推荐)
4
+
5
+ ### 步骤:
6
+
7
+ 1. **打开 Clash Verge**
8
+ - 点击左侧菜单的 **"规则"** 图标
9
+
10
+ 2. **添加规则**
11
+ - 在规则列表中找到合适的位置(通常在规则列表的顶部或中间)
12
+ - 点击 **"+"** 或 **"添加规则"** 按钮
13
+ - 或者直接编辑规则文件
14
+
15
+ 3. **添加 hf.co 规则**
16
+ - 规则类型:`DOMAIN-SUFFIX`
17
+ - 域名:`hf.co`
18
+ - 策略:`PROXY` 或 `DIRECT`(根据你的需求,这里应该用 `PROXY`)
19
+
20
+ 规则格式:
21
+ ```
22
+ DOMAIN-SUFFIX,hf.co,PROXY
23
+ ```
24
+
25
+ 4. **添加 IP 规则(可选,更精确)**
26
+ - 如果知道 hf.co 的 IP 地址(如 198.18.0.69),可以添加:
27
+ ```
28
+ IP-CIDR,198.18.0.69/32,PROXY
29
+ ```
30
+ 或者整个网段:
31
+ ```
32
+ IP-CIDR,198.18.0.0/16,PROXY
33
+ ```
34
+
35
+ 5. **保存配置**
36
+ - 点击 **"保存"** 或 **"应用"** 按钮
37
+ - 可能需要重启 Clash Verge
38
+
39
+ ## 方法 2: 直接编辑配置文件
40
+
41
+ ### 步骤:
42
+
43
+ 1. **找到配置文件**
44
+ - 在 Clash Verge 设置中查看 **"配置目录"** 或 **"当前配置"** 的路径
45
+ - 通常路径类似:`C:\Users\你的用户名\.config\clash-verge\profiles\`
46
+
47
+ 2. **打开配置文件**
48
+ - 找到当前使用的配置文件(通常是 `.yaml` 或 `.yml` 文件)
49
+ - 用文本编辑器打开
50
+
51
+ 3. **添加规则**
52
+ - 找到 `rules:` 部分
53
+ - 在规则列表的**顶部**添加(规则按顺序匹配,先匹配的生效):
54
+
55
+ ```yaml
56
+ rules:
57
+ - DOMAIN-SUFFIX,hf.co,PROXY
58
+ - IP-CIDR,198.18.0.69/32,PROXY
59
+ # ... 其他规则
60
+ ```
61
+
62
+ 4. **保存文件**
63
+ - 保存配置文件
64
+ - 在 Clash Verge 中重新加载配置
65
+
66
+ ## 方法 3: 临时测试 - 全局代理模式
67
+
68
+ 如果只是想测试 SSH 连接是否正常:
69
+
70
+ 1. **打开 Clash Verge**
71
+ - 点击左侧菜单的 **"连接"** 或 **"代理"** 图标
72
+
73
+ 2. **设置为全局代理**
74
+ - 找到 **"模式"** 或 **"代理模式"** 设置
75
+ - 选择 **"全局代理"** 或 **"Global"**
76
+ - 这样所有流量都会走代理
77
+
78
+ 3. **测试 SSH 连接**
79
+ ```bash
80
81
+ ```
82
+
83
+ 4. **如果成功,说明是规则问题**
84
+ - 可以恢复原来的模式
85
+ - 然后按照方法 1 或 2 添加规则
86
+
87
+ ## 规则类型说明
88
+
89
+ ### DOMAIN-SUFFIX
90
+ 匹配域名后缀,例如:
91
+ - `DOMAIN-SUFFIX,hf.co,PROXY` - 匹配所有 `*.hf.co` 的域名
92
+
93
+ ### DOMAIN
94
+ 精确匹配域名,例如:
95
+ - `DOMAIN,hf.co,PROXY` - 只匹配 `hf.co`(不包括子域名)
96
+
97
+ ### IP-CIDR
98
+ 匹配 IP 地址段,例如:
99
+ - `IP-CIDR,198.18.0.69/32,PROXY` - 匹配单个 IP
100
+ - `IP-CIDR,198.18.0.0/16,PROXY` - 匹配整个网段
101
+
102
+ ### GEOIP
103
+ 匹配地理位置,例如:
104
+ - `GEOIP,CN,DIRECT` - 中国 IP 直连
105
+ - `GEOIP,CN,PROXY` - 中国 IP 走代理
106
+
107
+ ## 推荐的规则配置
108
+
109
+ 对于 Hugging Face SSH 连接,建议添加以下规则(放在规则列表顶部):
110
+
111
+ ```yaml
112
+ rules:
113
+ # Hugging Face 相关规则
114
+ - DOMAIN-SUFFIX,hf.co,PROXY
115
+ - DOMAIN-SUFFIX,huggingface.co,PROXY
116
+ - IP-CIDR,198.18.0.0/16,PROXY
117
+
118
+ # ... 其他规则
119
+ - GEOIP,CN,DIRECT
120
+ - MATCH,PROXY
121
+ ```
122
+
123
+ ## 注意事项
124
+
125
+ 1. **规则顺序很重要**
126
+ - 规则按从上到下的顺序匹配
127
+ - 第一个匹配的规则会生效
128
+ - 所以要把特定规则放在通用规则之前
129
+
130
+ 2. **保存后重新加载**
131
+ - 修改规则后,需要在 Clash Verge 中重新加载配置
132
+ - 或者重启 Clash Verge
133
+
134
+ 3. **查看日志**
135
+ - 在 Clash Verge 的 **"日志"** 页面可以查看连接记录
136
+ - 可以看到哪些规则被匹配了
137
+
138
+ 4. **测试规则**
139
+ - 修改规则后,测试 SSH 连接
140
+ - 查看日志确认规则是否生效
141
+
create_clash_rule_patch.sh ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 创建 Clash 规则补丁脚本 ==="
4
+ echo ""
5
+
6
+ # 创建规则补丁内容
7
+ cat > clash_rules_patch.txt << 'EOF'
8
+ # Clash Verge 规则补丁
9
+ # 将这些规则添加到你的 Clash 配置文件的 rules: 部分顶部
10
+
11
+ # Hugging Face 相关规则(放在最前面)
12
+ - DOMAIN-SUFFIX,hf.co,PROXY
13
+ - DOMAIN-SUFFIX,huggingface.co,PROXY
14
+ - IP-CIDR,198.18.0.69/32,PROXY
15
+ - IP-CIDR,198.18.0.0/16,PROXY
16
+
17
+ # 注意:这些规则需要放在其他规则之前
18
+ # 例如,如果你的配置文件中有:
19
+ # rules:
20
+ # - GEOIP,CN,DIRECT
21
+ # - MATCH,PROXY
22
+ #
23
+ # 应该改为:
24
+ # rules:
25
+ # - DOMAIN-SUFFIX,hf.co,PROXY
26
+ # - IP-CIDR,198.18.0.69/32,PROXY
27
+ # - GEOIP,CN,DIRECT
28
+ # - MATCH,PROXY
29
+ EOF
30
+
31
+ echo "✓ 已创建规则补丁文件: clash_rules_patch.txt"
32
+ echo ""
33
+ echo "使用方法:"
34
+ echo "1. 打开 Clash Verge 设置,找到配置文件路径"
35
+ echo "2. 用文本编辑器打开配置文件(.yaml 文件)"
36
+ echo "3. 找到 rules: 部分"
37
+ echo "4. 将 clash_rules_patch.txt 中的规则复制到 rules: 列表的顶部"
38
+ echo "5. 保存文件"
39
+ echo "6. 在 Clash Verge 中重新加载配置"
40
+ echo ""
41
+
42
+ cat clash_rules_patch.txt
43
+
diagnose_and_fix.sh ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 诊断并修复 SSH 连接问题 ==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo "混合代理端口: 7897"
9
+ echo ""
10
+
11
+ # 1. 测试代理端口是否可达
12
+ echo "1. 测试代理端口连接..."
13
+ if timeout 3 bash -c "echo > /dev/tcp/$WSL_HOST_IP/7897" 2>/dev/null; then
14
+ echo "✓ 端口 7897 可达"
15
+ else
16
+ echo "✗ 端口 7897 不可达,请检查 Clash Verge 是否运行"
17
+ exit 1
18
+ fi
19
+ echo ""
20
+
21
+ # 2. 测试 HTTP 代理
22
+ echo "2. 测试 HTTP 代理功能..."
23
+ export http_proxy=http://$WSL_HOST_IP:7897
24
+ export https_proxy=http://$WSL_HOST_IP:7897
25
+ if curl -s --connect-timeout 5 --proxy "$http_proxy" https://www.google.com > /dev/null 2>&1; then
26
+ echo "✓ HTTP 代理工作正常"
27
+ HTTP_PROXY_WORKS=true
28
+ else
29
+ echo "✗ HTTP 代理测试失败"
30
+ HTTP_PROXY_WORKS=false
31
+ fi
32
+ echo ""
33
+
34
+ # 3. 测试 SOCKS5 代理
35
+ echo "3. 测试 SOCKS5 代理功能..."
36
+ if command -v curl > /dev/null 2>&1; then
37
+ if curl -s --connect-timeout 5 --socks5-hostname $WSL_HOST_IP:7897 https://www.google.com > /dev/null 2>&1; then
38
+ echo "✓ SOCKS5 代理工作正常"
39
+ SOCKS5_PROXY_WORKS=true
40
+ else
41
+ echo "✗ SOCKS5 代理测试失败"
42
+ SOCKS5_PROXY_WORKS=false
43
+ fi
44
+ else
45
+ echo "⚠️ curl 未安装,跳过 SOCKS5 测试"
46
+ SOCKS5_PROXY_WORKS=false
47
+ fi
48
+ echo ""
49
+
50
+ # 4. 检查 netcat 版本和功能
51
+ echo "4. 检查 netcat 功能..."
52
+ if command -v nc > /dev/null 2>&1; then
53
+ NC_VERSION=$(nc -h 2>&1 | head -1)
54
+ echo " netcat 版本: $NC_VERSION"
55
+
56
+ # 检查是否支持 -X 选项(SOCKS 代理)
57
+ if nc -h 2>&1 | grep -q "\-X"; then
58
+ echo " ✓ 支持 SOCKS 代理 (-X 选项)"
59
+ NC_SUPPORTS_SOCKS=true
60
+ else
61
+ echo " ✗ 不支持 SOCKS 代理"
62
+ NC_SUPPORTS_SOCKS=false
63
+ fi
64
+ else
65
+ echo " ✗ nc 未安装"
66
+ NC_SUPPORTS_SOCKS=false
67
+ fi
68
+ echo ""
69
+
70
+ # 5. 尝试不同的 SSH 连接方式
71
+ echo "5. 尝试不同的 SSH 连接方式..."
72
+ echo ""
73
+
74
+ SSH_CONFIG="$HOME/.ssh/config"
75
+ KEY_PATH="$HOME/.ssh/id_ed25519"
76
+
77
+ # 备份配置
78
+ if [ -f "$SSH_CONFIG" ]; then
79
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
80
+ fi
81
+
82
+ # 删除旧的 hf.co 配置
83
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
84
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
85
+ fi
86
+
87
+ # 方案 1: 使用 connect-proxy (HTTP 代理)
88
+ if command -v connect-proxy > /dev/null 2>&1 && [ "$HTTP_PROXY_WORKS" = "true" ]; then
89
+ echo "尝试方案 1: 使用 connect-proxy (HTTP 代理)..."
90
+ cat >> "$SSH_CONFIG" << EOF
91
+
92
+ # Hugging Face SSH 配置(HTTP 代理)
93
+ Host hf.co
94
+ HostName hf.co
95
+ User git
96
+ Port 443
97
+ IdentityFile $KEY_PATH
98
+ IdentitiesOnly yes
99
+ StrictHostKeyChecking accept-new
100
+ ConnectTimeout 10
101
+ ProxyCommand connect-proxy -H $WSL_HOST_IP:7897 %h %p
102
+ ServerAliveInterval 60
103
+ ServerAliveCountMax 3
104
+ TCPKeepAlive yes
105
+ LogLevel ERROR
106
+ EOF
107
+ chmod 600 "$SSH_CONFIG"
108
+
109
+ echo "测试连接..."
110
+ timeout 15 ssh -T [email protected] 2>&1 | head -5
111
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
112
+ echo "✓ 方案 1 成功!"
113
+ exit 0
114
+ fi
115
+ echo "✗ 方案 1 失败"
116
+ echo ""
117
+
118
+ # 删除配置,尝试下一个方案
119
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
120
+ fi
121
+
122
+ # 方案 2: 使用 socat (SOCKS5)
123
+ if command -v socat > /dev/null 2>&1 && [ "$SOCKS5_PROXY_WORKS" = "true" ]; then
124
+ echo "尝试方案 2: 使用 socat (SOCKS5)..."
125
+ cat >> "$SSH_CONFIG" << EOF
126
+
127
+ # Hugging Face SSH 配置(SOCKS5 via socat)
128
+ Host hf.co
129
+ HostName hf.co
130
+ User git
131
+ Port 443
132
+ IdentityFile $KEY_PATH
133
+ IdentitiesOnly yes
134
+ StrictHostKeyChecking accept-new
135
+ ConnectTimeout 10
136
+ ProxyCommand socat - SOCKS5:$WSL_HOST_IP:7897:%h:%p,socksport=7897
137
+ ServerAliveInterval 60
138
+ ServerAliveCountMax 3
139
+ TCPKeepAlive yes
140
+ LogLevel ERROR
141
+ EOF
142
+ chmod 600 "$SSH_CONFIG"
143
+
144
+ echo "测试连接..."
145
+ timeout 15 ssh -T [email protected] 2>&1 | head -5
146
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
147
+ echo "✓ 方案 2 成功!"
148
+ exit 0
149
+ fi
150
+ echo "✗ 方案 2 失败"
151
+ echo ""
152
+
153
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
154
+ fi
155
+
156
+ # 方案 3: 使用 proxychains
157
+ if command -v proxychains4 > /dev/null 2>&1 || command -v proxychains > /dev/null 2>&1; then
158
+ echo "尝试方案 3: 使用 proxychains..."
159
+ PROXYCHAINS_CMD=$(command -v proxychains4 || command -v proxychains)
160
+
161
+ # 配置 proxychains
162
+ if [ -f /etc/proxychains.conf ]; then
163
+ echo " 配置 proxychains..."
164
+ sudo sed -i 's/socks4.*127.0.0.1.*9050/socks5 '"$WSL_HOST_IP"' 7897/' /etc/proxychains.conf 2>/dev/null || true
165
+ fi
166
+
167
+ cat >> "$SSH_CONFIG" << EOF
168
+
169
+ # Hugging Face SSH 配置(基础配置,通过 proxychains 使用)
170
+ Host hf.co
171
+ HostName hf.co
172
+ User git
173
+ Port 443
174
+ IdentityFile $KEY_PATH
175
+ IdentitiesOnly yes
176
+ StrictHostKeyChecking accept-new
177
+ ConnectTimeout 10
178
+ ServerAliveInterval 60
179
+ ServerAliveCountMax 3
180
+ TCPKeepAlive yes
181
+ LogLevel ERROR
182
+ EOF
183
+ chmod 600 "$SSH_CONFIG"
184
+
185
+ echo "测试连接(使用 proxychains)..."
186
+ timeout 15 $PROXYCHAINS_CMD ssh -T [email protected] 2>&1 | head -5
187
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
188
+ echo "✓ 方案 3 成功!"
189
+ echo " 以后使用: $PROXYCHAINS_CMD git push"
190
+ exit 0
191
+ fi
192
+ echo "✗ 方案 3 失败"
193
+ echo ""
194
+ fi
195
+
196
+ # 方案 4: 直接连接(依赖 TUN 模式)
197
+ echo "尝试方案 4: 直接连接(依赖 TUN 模式自动代理)..."
198
+ cat >> "$SSH_CONFIG" << EOF
199
+
200
+ # Hugging Face SSH 配置(TUN 模式)
201
+ Host hf.co
202
+ HostName hf.co
203
+ User git
204
+ Port 443
205
+ IdentityFile $KEY_PATH
206
+ IdentitiesOnly yes
207
+ StrictHostKeyChecking accept-new
208
+ ConnectTimeout 10
209
+ ServerAliveInterval 60
210
+ ServerAliveCountMax 3
211
+ TCPKeepAlive yes
212
+ LogLevel ERROR
213
+ EOF
214
+ chmod 600 "$SSH_CONFIG"
215
+
216
+ echo "测试连接(TUN 模式)..."
217
+ timeout 15 ssh -T [email protected] 2>&1 | head -5
218
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
219
+ echo "✓ 方案 4 成功!"
220
+ exit 0
221
+ fi
222
+ echo "✗ 方案 4 失败"
223
+ echo ""
224
+
225
+ # 如果都失败了,提供安装建议
226
+ echo "=== 所有方案都失败了 ==="
227
+ echo ""
228
+ echo "建议安装以下工具之一:"
229
+ echo ""
230
+ echo "1. connect-proxy (HTTP 代理):"
231
+ echo " sudo apt-get install connect-proxy"
232
+ echo ""
233
+ echo "2. socat (SOCKS5 代理):"
234
+ echo " sudo apt-get install socat"
235
+ echo ""
236
+ echo "3. proxychains (通用代理):"
237
+ echo " sudo apt-get install proxychains4"
238
+ echo ""
239
+ echo "或者检查 Clash Verge 的 TUN 模式配置,确保所有流量都被代理"
240
+
edit_correct_config.md ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 编辑正确的 Clash Verge 配置文件
2
+
3
+ ## 问题分析
4
+
5
+ 你修改了 `clash-verge.yaml`,但 Clash Verge 可能实际使用的是 `profiles/` 文件夹中的配置文件。
6
+
7
+ ## 正确的配置文件位置
8
+
9
+ ### 方法 1: 通过 Clash Verge 界面确认
10
+
11
+ 1. 打开 Clash Verge
12
+ 2. 点击左侧 **"订阅"** 或 **"代理"** 图标
13
+ 3. 查看当前使用的配置名称
14
+ 4. 这个配置对应的文件在 `profiles/` 文件夹中
15
+
16
+ ### 方法 2: 检查 profiles.yaml
17
+
18
+ 1. 打开 `profiles.yaml` 文件
19
+ 2. 查找 `current` 字段,看当前使用的是哪个配置
20
+ 3. 或者查看 `items` 列表,找到激活的配置
21
+
22
+ ### 方法 3: 直接查看 profiles 文件夹
23
+
24
+ 1. 打开 `profiles/` 文件夹
25
+ 2. 找到 `.yaml` 文件(可能有多个)
26
+ 3. 通过修改时间判断哪个是当前使用的
27
+ 4. 或者查看文件名,通常订阅配置会有特定命名
28
+
29
+ ## 修改步骤
30
+
31
+ ### 步骤 1: 找到正确的配置文件
32
+
33
+ 进入 `profiles/` 文件夹,找到当前使用的配置文件。
34
+
35
+ ### 步骤 2: 编辑配置文件
36
+
37
+ 用文本编辑器打开配置文件,找到 `rules:` 部分。
38
+
39
+ ### 步骤 3: 添加规则
40
+
41
+ 在 `rules:` 列表的**最顶部**添加:
42
+
43
+ ```yaml
44
+ rules:
45
+ # Hugging Face 规则(必须放在最前面)
46
+ - DOMAIN-SUFFIX,hf.co,PROXY
47
+ - IP-CIDR,198.18.0.69/32,PROXY
48
+ - IP-CIDR,198.18.0.0/16,PROXY
49
+
50
+ # 其他现有规则保持不变
51
+ - GEOIP,CN,DIRECT
52
+ - MATCH,PROXY
53
+ ```
54
+
55
+ ### 步骤 4: 保存并重新加载
56
+
57
+ 1. 保存文件
58
+ 2. 在 Clash Verge 中点击 **"重新加载配置"**
59
+ 3. 或者重启 Clash Verge
60
+
61
+ ## 如果使用订阅配置
62
+
63
+ 如果你使用的是订阅配置(从服务器下载的),修改后可能会被覆盖。
64
+
65
+ ### 解决方案 A: 修改订阅配置后禁用自动更新
66
+
67
+ 1. 修改配置文件
68
+ 2. 在 Clash Verge 设置中禁用该订阅的自动更新
69
+ 3. 或者设置为手动更新
70
+
71
+ ### 解决方案 B: 使用本地规则文件
72
+
73
+ 有些 Clash 配置支持外部规则文件,可以创建一个独立的规则文件。
74
+
75
+ ### 解决方案 C: 创建自定义配置
76
+
77
+ 1. 在 Clash Verge 中创建新的本地配置
78
+ 2. 基于订阅配置创建
79
+ 3. 添加自定义规则
80
+ 4. 使用这个自定义配置
81
+
82
+ ## 验证配置是否生效
83
+
84
+ 1. 查看 Clash Verge 的 **"日志"** 页面
85
+ 2. 尝试连接 hf.co
86
+ 3. 在日志中应该能看到规则匹配记录
87
+ 4. 测试 SSH 连接:`ssh -T [email protected]`
88
+
89
+ ## 常见问题
90
+
91
+ ### Q: 修改后配置被重置?
92
+ A: 可能是订阅配置自动更新了。禁用自动更新或使用本地配置。
93
+
94
+ ### Q: 找不到 rules 部分?
95
+ A: 有些配置可能使用外部规则文件,需要检查配置中的 `rule-providers` 部分。
96
+
97
+ ### Q: 修改后不生效?
98
+ A: 确保:
99
+ 1. 编辑的是正确的配置文件
100
+ 2. YAML 格式正确
101
+ 3. 规则放在列表顶部
102
+ 4. 重新加载了配置
103
+
final_fix.sh ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 最终修复方案 ==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo ""
9
+
10
+ # 先测试 SOCKS5 是否工作
11
+ echo "1. 测试 SOCKS5 代理功能..."
12
+ if command -v curl > /dev/null 2>&1; then
13
+ if timeout 5 curl -s --socks5-hostname $WSL_HOST_IP:7897 https://www.google.com > /dev/null 2>&1; then
14
+ echo "✓ SOCKS5 代理工作正常,使用 SOCKS5 方式"
15
+ USE_SOCKS5=true
16
+ else
17
+ echo "✗ SOCKS5 代理测试失败,尝试其他方式"
18
+ USE_SOCKS5=false
19
+ fi
20
+ else
21
+ echo "⚠️ curl 未安装,假设 SOCKS5 可用"
22
+ USE_SOCKS5=true
23
+ fi
24
+ echo ""
25
+
26
+ # 安装必要的工具
27
+ echo "2. 检查并安装必要工具..."
28
+ if ! command -v nc > /dev/null 2>&1; then
29
+ echo "安装 netcat-openbsd..."
30
+ sudo apt-get update -qq
31
+ sudo apt-get install -y netcat-openbsd
32
+ fi
33
+
34
+ # 检查 nc 是否支持 SOCKS
35
+ if nc -h 2>&1 | grep -q "\-X"; then
36
+ NC_SUPPORTS_SOCKS=true
37
+ else
38
+ NC_SUPPORTS_SOCKS=false
39
+ echo "⚠️ nc 不支持 SOCKS,尝试安装 netcat-openbsd..."
40
+ sudo apt-get install -y netcat-openbsd
41
+ if nc -h 2>&1 | grep -q "\-X"; then
42
+ NC_SUPPORTS_SOCKS=true
43
+ fi
44
+ fi
45
+ echo ""
46
+
47
+ # 配置 SSH
48
+ SSH_CONFIG="$HOME/.ssh/config"
49
+ KEY_PATH="$HOME/.ssh/id_ed25519"
50
+
51
+ # 备份
52
+ if [ -f "$SSH_CONFIG" ]; then
53
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
54
+ fi
55
+
56
+ # 删除旧的 hf.co 配置
57
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
58
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
59
+ fi
60
+
61
+ # 根据测试结果选择配置方式
62
+ if [ "$USE_SOCKS5" = "true" ] && [ "$NC_SUPPORTS_SOCKS" = "true" ]; then
63
+ echo "3. 配置 SSH(使用 SOCKS5 via nc)..."
64
+ cat >> "$SSH_CONFIG" << EOF
65
+
66
+ # Hugging Face SSH 配置(SOCKS5)
67
+ Host hf.co
68
+ HostName hf.co
69
+ User git
70
+ Port 443
71
+ IdentityFile $KEY_PATH
72
+ IdentitiesOnly yes
73
+ StrictHostKeyChecking accept-new
74
+ ConnectTimeout 20
75
+ ProxyCommand nc -X 5 -x $WSL_HOST_IP:7897 %h %p
76
+ ServerAliveInterval 30
77
+ ServerAliveCountMax 3
78
+ TCPKeepAlive yes
79
+ LogLevel ERROR
80
+ EOF
81
+ elif command -v connect-proxy > /dev/null 2>&1; then
82
+ echo "3. 配置 SSH(使用 HTTP via connect-proxy)..."
83
+ cat >> "$SSH_CONFIG" << EOF
84
+
85
+ # Hugging Face SSH 配置(HTTP 代理)
86
+ Host hf.co
87
+ HostName hf.co
88
+ User git
89
+ Port 443
90
+ IdentityFile $KEY_PATH
91
+ IdentitiesOnly yes
92
+ StrictHostKeyChecking accept-new
93
+ ConnectTimeout 20
94
+ ProxyCommand connect-proxy -H $WSL_HOST_IP:7897 %h %p
95
+ ServerAliveInterval 30
96
+ ServerAliveCountMax 3
97
+ TCPKeepAlive yes
98
+ LogLevel ERROR
99
+ EOF
100
+ else
101
+ echo "3. 配置 SSH(直接连接,依赖 TUN 模式)..."
102
+ cat >> "$SSH_CONFIG" << EOF
103
+
104
+ # Hugging Face SSH 配置(TUN 模式)
105
+ Host hf.co
106
+ HostName hf.co
107
+ User git
108
+ Port 443
109
+ IdentityFile $KEY_PATH
110
+ IdentitiesOnly yes
111
+ StrictHostKeyChecking accept-new
112
+ ConnectTimeout 20
113
+ ServerAliveInterval 30
114
+ ServerAliveCountMax 3
115
+ TCPKeepAlive yes
116
+ LogLevel ERROR
117
+ EOF
118
+ fi
119
+
120
+ chmod 600 "$SSH_CONFIG"
121
+ chmod 600 "$KEY_PATH"
122
+ chmod 644 "$KEY_PATH.pub"
123
+
124
+ echo "✓ SSH 配置已完成"
125
+ echo ""
126
+
127
+ # 测试连接
128
+ echo "4. 测试 SSH 连接..."
129
+ echo "(这可能需要 10-20 秒)"
130
+ echo ""
131
+
132
+ timeout 25 ssh -T [email protected] 2>&1
133
+ SSH_EXIT=$?
134
+
135
+ echo ""
136
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
137
+ echo "✓ SSH 连接成功!"
138
+ echo ""
139
+ echo "=== 配置完成 ==="
140
+ echo "现在可以正常使用 git push 了"
141
+ echo ""
142
+ echo "注意:如果 Windows 防火墙关闭后可以连接,"
143
+ echo "建议配置防火墙规则允许端口 7897,而不是完全关闭防火墙"
144
+ else
145
+ echo "✗ SSH 连接仍然失败"
146
+ echo ""
147
+ echo "请运行详细测试:"
148
+ echo " ./test_socks5.sh"
149
+ echo " ./try_different_methods.sh"
150
+ fi
151
+
find_active_config.sh ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 查找 Clash Verge 实际使用的配置文件 ==="
4
+ echo ""
5
+
6
+ echo "从你的文件列表看,有几个可能的配置文件:"
7
+ echo ""
8
+ echo "1. clash-verge.yaml (473 KB) - 可能是主配置"
9
+ echo "2. profiles/ 文件夹 - 通常存放实际使用的配置"
10
+ echo "3. profiles.yaml (2 KB) - 可能指定使用哪个配置文件"
11
+ echo ""
12
+
13
+ echo "=== 正确的配置文件位置 ==="
14
+ echo ""
15
+ echo "Clash Verge 通常使用 profiles/ 文件夹中的配置文件"
16
+ echo "而不是根目录的 clash-verge.yaml"
17
+ echo ""
18
+
19
+ echo "请检查:"
20
+ echo "1. 打开 profiles/ 文件夹"
21
+ echo "2. 找到当前使用的配置文件(通常是 .yaml 文件)"
22
+ echo "3. 编辑那个文件,而不是根目录的 clash-verge.yaml"
23
+ echo ""
24
+
25
+ echo "=== 或者检查 profiles.yaml ==="
26
+ echo ""
27
+ echo "profiles.yaml 文件可能指定了当前使用的配置文件"
28
+ echo "打开 profiles.yaml 查看 'current' 或 'items' 字段"
29
+ echo "找到当前激活的配置文件名称"
30
+ echo ""
31
+
32
+ echo "=== 修改步骤 ==="
33
+ echo ""
34
+ echo "1. 进入 profiles/ 文件夹"
35
+ echo "2. 找到当前使用的配置文件(可能是订阅配置或手动配置)"
36
+ echo "3. 编辑那个文件的 rules: 部分"
37
+ echo "4. 在 rules: 列表顶部添加:"
38
+ echo ""
39
+ echo " rules:"
40
+ echo " - DOMAIN-SUFFIX,hf.co,PROXY"
41
+ echo " - IP-CIDR,198.18.0.69/32,PROXY"
42
+ echo " # ... 其他规则"
43
+ echo ""
44
+ echo "5. 保存文件"
45
+ echo "6. 在 Clash Verge 中重新加载配置"
46
+ echo ""
47
+
find_and_edit_clash_config.sh ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 查找并编辑 Clash Verge 配置文件 ==="
4
+ echo ""
5
+
6
+ echo "Clash Verge 的配置文件通常在以下位置:"
7
+ echo ""
8
+ echo "Windows 路径:"
9
+ echo " C:\\Users\\你的用户名\\.config\\clash-verge\\profiles\\"
10
+ echo " C:\\Users\\你的用户名\\AppData\\Roaming\\clash-verge\\profiles\\"
11
+ echo ""
12
+
13
+ echo "=== 手动查找步骤 ==="
14
+ echo ""
15
+ echo "1. 打开 Clash Verge"
16
+ echo "2. 点击 '设置'"
17
+ echo "3. 找到 '配置目录' 或 '当前配置' 或 'Profiles' 相关设置"
18
+ echo "4. 记下配置文件路径"
19
+ echo ""
20
+
21
+ echo "=== 或者通过 WSL 查找 ==="
22
+ echo ""
23
+
24
+ # 尝试在 WSL 中访问 Windows 路径
25
+ WIN_USER=$(cmd.exe /c "echo %USERNAME%" 2>/dev/null | tr -d '\r\n')
26
+ if [ -n "$WIN_USER" ]; then
27
+ echo "检测到 Windows 用户名: $WIN_USER"
28
+ echo ""
29
+
30
+ # 尝试几个可能的路径
31
+ POSSIBLE_PATHS=(
32
+ "/mnt/c/Users/$WIN_USER/.config/clash-verge/profiles"
33
+ "/mnt/c/Users/$WIN_USER/AppData/Roaming/clash-verge/profiles"
34
+ "/mnt/c/Users/$WIN_USER/.config/clash-verge"
35
+ )
36
+
37
+ for path in "${POSSIBLE_PATHS[@]}"; do
38
+ if [ -d "$path" ]; then
39
+ echo "✓ 找到配置目录: $path"
40
+ echo ""
41
+ echo "配置文件列表:"
42
+ find "$path" -name "*.yaml" -o -name "*.yml" 2>/dev/null | head -10
43
+ echo ""
44
+ fi
45
+ done
46
+ fi
47
+
48
+ echo "=== 编辑配置文件的方法 ==="
49
+ echo ""
50
+ echo "1. 找到配置文件后,用文本编辑器打开(如 Notepad++、VS Code)"
51
+ echo "2. 找到 rules: 部分"
52
+ echo "3. 在 rules: 列表的顶部添加:"
53
+ echo ""
54
+ echo " rules:"
55
+ echo " - DOMAIN-SUFFIX,hf.co,PROXY"
56
+ echo " - IP-CIDR,198.18.0.69/32,PROXY"
57
+ echo " # ... 其他现有规则"
58
+ echo ""
59
+ echo "4. 保存文件"
60
+ echo "5. 在 Clash Verge 中点击 '重新加载配置' 或重启应用"
61
+ echo ""
62
+
63
+ echo "=== 注意事项 ==="
64
+ echo ""
65
+ echo "1. 确保编辑的是 Clash Verge 当前使用的配置文件"
66
+ echo "2. YAML 格式要正确(缩进使用空格,不要用 Tab)"
67
+ echo "3. 规则顺序很重要,特定规则要放在通用规则之前"
68
+ echo "4. 保存后要在 Clash Verge 中重新加载配置"
69
+ echo ""
70
+
fix_git_push.sh ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== Hugging Face Git Push 问题诊断和修复脚本 ==="
4
+ echo ""
5
+
6
+ # 1. 检查当前远程仓库配置
7
+ echo "1. 检查当前远程仓库配置:"
8
+ git remote -v
9
+ echo ""
10
+
11
+ # 2. 检查 SSH key 是否存在
12
+ echo "2. 检查 SSH key:"
13
+ if [ -f ~/.ssh/id_rsa.pub ] || [ -f ~/.ssh/id_ed25519.pub ]; then
14
+ echo "✓ 找到 SSH public key"
15
+ if [ -f ~/.ssh/id_ed25519.pub ]; then
16
+ echo "公钥内容 (id_ed25519.pub):"
17
+ cat ~/.ssh/id_ed25519.pub
18
+ elif [ -f ~/.ssh/id_rsa.pub ]; then
19
+ echo "公钥内容 (id_rsa.pub):"
20
+ cat ~/.ssh/id_rsa.pub
21
+ fi
22
+ else
23
+ echo "✗ 未找到 SSH public key"
24
+ fi
25
+ echo ""
26
+
27
+ # 3. 测试 SSH 连接
28
+ echo "3. 测试 SSH 连接到 Hugging Face:"
29
+ ssh -T [email protected] 2>&1
30
+ echo ""
31
+
32
+ # 4. 检查 SSH 配置
33
+ echo "4. 检查 ~/.ssh/config 配置:"
34
+ if [ -f ~/.ssh/config ]; then
35
+ cat ~/.ssh/config
36
+ else
37
+ echo "~/.ssh/config 文件不存在"
38
+ fi
39
+ echo ""
40
+
41
+ # 5. 提供解决方案
42
+ echo "=== 解决方案 ==="
43
+ echo ""
44
+ echo "如果 SSH 连接失败,有以下几种解决方案:"
45
+ echo ""
46
+ echo "方案 1: 切换到 HTTPS(推荐,最简单)"
47
+ echo " 运行以下命令将远程仓库从 SSH 切换到 HTTPS:"
48
+ echo " git remote set-url origin https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME"
49
+ echo ""
50
+ echo "方案 2: 配置 SSH(如果必须使用 SSH)"
51
+ echo " 1. 确保 SSH key 已添加到 Hugging Face 账户"
52
+ echo " 2. 创建或编辑 ~/.ssh/config 文件,添加以下内容:"
53
+ echo " Host hf.co"
54
+ echo " HostName hf.co"
55
+ echo " User git"
56
+ echo " Port 22"
57
+ echo " IdentityFile ~/.ssh/id_ed25519"
58
+ echo " 3. 设置正确的权限:"
59
+ echo " chmod 600 ~/.ssh/config"
60
+ echo ""
61
+ echo "方案 3: 使用 SSH over HTTPS 端口(如果端口 22 被阻止)"
62
+ echo " 在 ~/.ssh/config 中添加:"
63
+ echo " Host hf.co"
64
+ echo " HostName hf.co"
65
+ echo " User git"
66
+ echo " Port 443"
67
+ echo " IdentityFile ~/.ssh/id_ed25519"
68
+ echo ""
69
+
fix_git_remote.sh ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 修复 Git 远程仓库配置 ==="
4
+ echo ""
5
+
6
+ echo "当前远程仓库配置:"
7
+ git remote -v
8
+ echo ""
9
+
10
+ # 获取当前远程 URL
11
+ CURRENT_URL=$(git config --get remote.origin.url)
12
+ echo "当前 URL: $CURRENT_URL"
13
+ echo ""
14
+
15
+ # 检查是否是 Hugging Face Spaces
16
+ if echo "$CURRENT_URL" | grep -q "huggingface\|hf.co"; then
17
+ echo "检测到 Hugging Face 仓库"
18
+
19
+ # 尝试提取用户名和空间名
20
+ if echo "$CURRENT_URL" | grep -q "spaces/"; then
21
+ SPACE_PATH=$(echo "$CURRENT_URL" | sed -E 's|.*spaces/([^/]+/[^/]+).*|\1|')
22
+ echo "检测到的空间路径: $SPACE_PATH"
23
+
24
+ # 构建正确的 SSH URL
25
+ NEW_URL="[email protected]:spaces/$SPACE_PATH"
26
+ echo ""
27
+ echo "建议的 SSH URL: $NEW_URL"
28
+ echo ""
29
+ read -p "是否更新为: $NEW_URL? (y/n): " confirm
30
+
31
+ if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
32
+ git remote set-url origin "$NEW_URL"
33
+ echo "✓ 已更新远程 URL"
34
+ echo ""
35
+ echo "新的远程配置:"
36
+ git remote -v
37
+ echo ""
38
+ echo "现在可以尝试: git push"
39
+ fi
40
+ else
41
+ echo "无法自动识别空间路径"
42
+ echo ""
43
+ echo "请手动设置:"
44
+ echo " git remote set-url origin [email protected]:spaces/YOUR_USERNAME/YOUR_SPACE_NAME"
45
+ fi
46
+ else
47
+ echo "未检测到 Hugging Face 仓库"
48
+ echo ""
49
+ echo "如果是 Hugging Face Spaces,请设置:"
50
+ echo " git remote set-url origin [email protected]:spaces/YOUR_USERNAME/YOUR_SPACE_NAME"
51
+ echo ""
52
+ echo "或者如果是 Hugging Face 模型仓库:"
53
+ echo " git remote set-url origin [email protected]:YOUR_USERNAME/YOUR_MODEL_NAME"
54
+ fi
55
+
fix_ssh_banner_timeout.sh ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 修复 SSH Banner Exchange 超时问题 ==="
4
+ echo ""
5
+
6
+ echo "问题分析:"
7
+ echo "TCP 连接已建立,但 SSH 握手在 banner exchange 阶段超时"
8
+ echo "这可能是因为 TUN 模式没有正确处理 SSH 流量"
9
+ echo ""
10
+
11
+ SSH_CONFIG="$HOME/.ssh/config"
12
+ KEY_PATH="$HOME/.ssh/id_ed25519"
13
+
14
+ # 备份配置
15
+ if [ -f "$SSH_CONFIG" ]; then
16
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
17
+ fi
18
+
19
+ # 删除旧的 hf.co 配置
20
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
21
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
22
+ fi
23
+
24
+ echo "尝试不同的配置方案..."
25
+ echo ""
26
+
27
+ # 方案 1: 增加超时时间,添加更多选项
28
+ echo "方案 1: 增加超时和重试选项..."
29
+ cat >> "$SSH_CONFIG" << EOF
30
+
31
+ # Hugging Face SSH 配置(增加超时和重试)
32
+ Host hf.co
33
+ HostName hf.co
34
+ User git
35
+ Port 443
36
+ IdentityFile $KEY_PATH
37
+ IdentitiesOnly yes
38
+ StrictHostKeyChecking accept-new
39
+ ConnectTimeout 60
40
+ ServerAliveInterval 10
41
+ ServerAliveCountMax 10
42
+ TCPKeepAlive yes
43
+ Compression no
44
+ LogLevel DEBUG1
45
+ EOF
46
+
47
+ chmod 600 "$SSH_CONFIG"
48
+ chmod 600 "$KEY_PATH"
49
+ chmod 644 "$KEY_PATH.pub"
50
+
51
+ echo "测试方案 1..."
52
+ timeout 70 ssh -T -o ConnectTimeout=60 [email protected] 2>&1 | head -20
53
+ SSH_EXIT=${PIPESTATUS[0]}
54
+
55
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
56
+ if ! timeout 70 ssh -T [email protected] 2>&1 | grep -qi "timeout"; then
57
+ echo ""
58
+ echo "✓ 方案 1 成功!"
59
+ exit 0
60
+ fi
61
+ fi
62
+
63
+ echo "方案 1 失败,尝试方案 2..."
64
+ echo ""
65
+
66
+ # 方案 2: 尝试端口 22
67
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
68
+ cat >> "$SSH_CONFIG" << EOF
69
+
70
+ # Hugging Face SSH 配置(尝试端口 22)
71
+ Host hf.co
72
+ HostName hf.co
73
+ User git
74
+ Port 22
75
+ IdentityFile $KEY_PATH
76
+ IdentitiesOnly yes
77
+ StrictHostKeyChecking accept-new
78
+ ConnectTimeout 60
79
+ ServerAliveInterval 10
80
+ ServerAliveCountMax 10
81
+ TCPKeepAlive yes
82
+ Compression no
83
+ LogLevel DEBUG1
84
+ EOF
85
+
86
+ echo "测试方案 2(端口 22)..."
87
+ timeout 70 ssh -T -o ConnectTimeout=60 [email protected] 2>&1 | head -20
88
+ SSH_EXIT=${PIPESTATUS[0]}
89
+
90
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
91
+ if ! timeout 70 ssh -T [email protected] 2>&1 | grep -qi "timeout"; then
92
+ echo ""
93
+ echo "✓ 方案 2 成功(端口 22)!"
94
+ exit 0
95
+ fi
96
+ fi
97
+
98
+ echo "方案 2 失败,尝试方案 3..."
99
+ echo ""
100
+
101
+ # 方案 3: 使用 IP 地址而不是域名
102
+ HF_IP=$(getent hosts hf.co | awk '{print $1}' | head -1)
103
+ if [ -n "$HF_IP" ]; then
104
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
105
+ cat >> "$SSH_CONFIG" << EOF
106
+
107
+ # Hugging Face SSH 配置(使用 IP 地址)
108
+ Host hf.co
109
+ HostName $HF_IP
110
+ User git
111
+ Port 443
112
+ IdentityFile $KEY_PATH
113
+ IdentitiesOnly yes
114
+ StrictHostKeyChecking accept-new
115
+ ConnectTimeout 60
116
+ ServerAliveInterval 10
117
+ ServerAliveCountMax 10
118
+ TCPKeepAlive yes
119
+ Compression no
120
+ LogLevel DEBUG1
121
+ EOF
122
+
123
+ echo "测试方案 3(使用 IP: $HF_IP)..."
124
+ timeout 70 ssh -T -o ConnectTimeout=60 [email protected] 2>&1 | head -20
125
+ SSH_EXIT=${PIPESTATUS[0]}
126
+
127
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
128
+ if ! timeout 70 ssh -T [email protected] 2>&1 | grep -qi "timeout"; then
129
+ echo ""
130
+ echo "✓ 方案 3 成功(使用 IP)!"
131
+ exit 0
132
+ fi
133
+ fi
134
+ fi
135
+
136
+ echo ""
137
+ echo "所有方案都失败了"
138
+ echo ""
139
+ echo "可能的原因:"
140
+ echo "1. Clash Verge 的 TUN 模式可能没有正确处理 SSH 协议"
141
+ echo "2. 需要检查 Clash Verge 的规则,确保 SSH 流量被正确代理"
142
+ echo "3. 可能需要使用显式代理而不是依赖 TUN 模式"
143
+ echo ""
144
+ echo "建议:"
145
+ echo "1. 检查 Clash Verge 日志,查看是否有 hf.co 的连接记录"
146
+ echo "2. 尝试在 Clash Verge 中临时设置为全局代理模式测试"
147
+ echo "3. 或者尝试使用 HTTPS + token 的方式(虽然你不想用)"
148
+
fix_ssh_connection.sh ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 修复 Hugging Face SSH 连接问题 ==="
4
+ echo ""
5
+
6
+ # 1. 检查 SSH key 是否已添加到 Hugging Face
7
+ echo "1. 检查 SSH key 配置..."
8
+ if [ -f ~/.ssh/id_ed25519.pub ]; then
9
+ echo "✓ 找到 SSH 公钥:"
10
+ cat ~/.ssh/id_ed25519.pub
11
+ echo ""
12
+ echo "⚠️ 请确认此公钥已添加到:https://huggingface.co/settings/keys"
13
+ echo " 如果未添加,请先添加后再继续"
14
+ echo ""
15
+ read -p "公钥已添加到 Hugging Face?(y/n): " key_added
16
+ if [ "$key_added" != "y" ] && [ "$key_added" != "Y" ]; then
17
+ echo "请先添加公钥到 Hugging Face,然后重新运行此脚本"
18
+ exit 1
19
+ fi
20
+ else
21
+ echo "✗ 未找到 SSH 公钥"
22
+ exit 1
23
+ fi
24
+ echo ""
25
+
26
+ # 2. 更新 SSH 配置,添加超时和连接选项
27
+ echo "2. 更新 SSH 配置..."
28
+ SSH_CONFIG="$HOME/.ssh/config"
29
+
30
+ # 备份
31
+ if [ -f "$SSH_CONFIG" ]; then
32
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
33
+ fi
34
+
35
+ # 删除旧的 hf.co 配置
36
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
37
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
38
+ fi
39
+
40
+ # 添加优化的配置
41
+ KEY_PATH="$HOME/.ssh/id_ed25519"
42
+ cat >> "$SSH_CONFIG" << 'EOF'
43
+
44
+ # Hugging Face SSH 配置(优化版)
45
+ Host hf.co
46
+ HostName hf.co
47
+ User git
48
+ Port 443
49
+ IdentityFile ~/.ssh/id_ed25519
50
+ IdentitiesOnly yes
51
+ StrictHostKeyChecking accept-new
52
+ ConnectTimeout 10
53
+ ServerAliveInterval 60
54
+ ServerAliveCountMax 3
55
+ TCPKeepAlive yes
56
+ LogLevel ERROR
57
+ EOF
58
+
59
+ chmod 600 "$SSH_CONFIG"
60
+ echo "✓ SSH 配置已更新(带超时设置)"
61
+ echo ""
62
+
63
+ # 3. 测试网络连接
64
+ echo "3. 测试网络连接..."
65
+ echo "测试 hf.co 的 443 端口..."
66
+ if timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then
67
+ echo "✓ 端口 443 可达"
68
+ else
69
+ echo "✗ 端口 443 不可达,可能被防火墙阻止"
70
+ echo " 尝试使用代理或检查网络设置"
71
+ fi
72
+ echo ""
73
+
74
+ # 4. 使用超时测试 SSH 连接
75
+ echo "4. 测试 SSH 连接(10秒超时)..."
76
+ timeout 10 ssh -T -o ConnectTimeout=10 -o StrictHostKeyChecking=no [email protected] 2>&1
77
+ SSH_EXIT=$?
78
+
79
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
80
+ # 退出码 0 或 1 都可能是成功(1 通常表示认证成功但命令失败)
81
+ echo ""
82
+ echo "✓ SSH 连接测试完成"
83
+ echo ""
84
+ echo "=== 配置完成 ==="
85
+ echo "现在可以尝试 git push"
86
+ else
87
+ echo ""
88
+ echo "✗ SSH 连接失败或超时"
89
+ echo ""
90
+ echo "可能的解决方案:"
91
+ echo "1. 检查网络连接和防火墙设置"
92
+ echo "2. 如果使用代理,配置 SSH 代理:"
93
+ echo " export http_proxy=http://proxy:port"
94
+ echo " export https_proxy=http://proxy:port"
95
+ echo "3. 尝试使用不同的网络环境"
96
+ echo "4. 检查 Hugging Face 服务状态"
97
+ fi
98
+
fix_ssh_final.sh ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 修复 SSH 连接(最终方案)==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo ""
9
+
10
+ SSH_CONFIG="$HOME/.ssh/config"
11
+ KEY_PATH="$HOME/.ssh/id_ed25519"
12
+
13
+ # 备份配置
14
+ if [ -f "$SSH_CONFIG" ]; then
15
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
16
+ fi
17
+
18
+ # 删除旧的 hf.co 配置
19
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
20
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
21
+ fi
22
+
23
+ # 方案:直接连接,完全依赖 TUN 模式自动代理
24
+ # 因为 TUN 模式应该自动代理所有流量,不需要显式配置代理
25
+ echo "配置 SSH(直接连接,依赖 TUN 模式自动代理)..."
26
+ cat >> "$SSH_CONFIG" << EOF
27
+
28
+ # Hugging Face SSH 配置(TUN 模式自动代理)
29
+ Host hf.co
30
+ HostName hf.co
31
+ User git
32
+ Port 443
33
+ IdentityFile $KEY_PATH
34
+ IdentitiesOnly yes
35
+ StrictHostKeyChecking accept-new
36
+ ConnectTimeout 30
37
+ ServerAliveInterval 20
38
+ ServerAliveCountMax 5
39
+ TCPKeepAlive yes
40
+ LogLevel INFO
41
+ EOF
42
+
43
+ chmod 600 "$SSH_CONFIG"
44
+ chmod 600 "$KEY_PATH"
45
+ chmod 644 "$KEY_PATH.pub"
46
+
47
+ echo "✓ SSH 配置已完成(直接连接模式)"
48
+ echo ""
49
+
50
+ # 测试连接
51
+ echo "测试 SSH 连接..."
52
+ echo "(TUN 模式应该自动代理所有流量,包括 SSH)"
53
+ echo ""
54
+
55
+ # 先测试网络连接
56
+ echo "1. 测试到 hf.co 的网络连接..."
57
+ if timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then
58
+ echo "✓ hf.co:443 可达(可能已通过 TUN 模式代理)"
59
+ else
60
+ echo "✗ hf.co:443 不可达"
61
+ echo " 请检查 Clash Verge 的 TUN 模式是否正常工作"
62
+ fi
63
+ echo ""
64
+
65
+ # 测试 SSH
66
+ echo "2. 测试 SSH 连接..."
67
+ SSH_OUTPUT=$(timeout 30 ssh -T [email protected] 2>&1)
68
+ SSH_EXIT=$?
69
+
70
+ echo "$SSH_OUTPUT"
71
+ echo ""
72
+
73
+ # 检查结果
74
+ if echo "$SSH_OUTPUT" | grep -qi "successfully authenticated\|you've successfully authenticated\|welcome"; then
75
+ echo "✓ SSH 连接成功!"
76
+ echo ""
77
+ echo "=== 配置完成 ==="
78
+ echo "现在可以正常使用 git push 了"
79
+ exit 0
80
+ elif [ $SSH_EXIT -eq 1 ] && ! echo "$SSH_OUTPUT" | grep -qi "timeout\|refused\|connection closed"; then
81
+ # 退出码 1 但没超时/拒绝错误,可能是认证成功但命令失败(这是正常的)
82
+ echo "✓ SSH 连接可能成功(退出码 1 但无超时错误)"
83
+ echo ""
84
+ echo "尝试推送测试:"
85
+ echo " git push"
86
+ exit 0
87
+ else
88
+ echo "✗ SSH 连接失败"
89
+ echo ""
90
+ echo "错误分析:"
91
+ if echo "$SSH_OUTPUT" | grep -qi "timeout"; then
92
+ echo "- 连接超时"
93
+ fi
94
+ if echo "$SSH_OUTPUT" | grep -qi "connection refused"; then
95
+ echo "- 连接被拒绝"
96
+ fi
97
+ if echo "$SSH_OUTPUT" | grep -qi "connection closed"; then
98
+ echo "- 连接被关闭"
99
+ fi
100
+ echo ""
101
+ echo "可能的原因:"
102
+ echo "1. TUN 模式未正确代理 SSH 流量"
103
+ echo "2. Clash Verge 的规则可能阻止了 SSH 连接"
104
+ echo "3. 需要检查 Clash Verge 的日志"
105
+ echo ""
106
+ echo "建议:"
107
+ echo "1. 检查 Clash Verge 的 TUN 模式是否启用"
108
+ echo "2. 检查 Clash Verge 的规则,确保允许 hf.co 的连接"
109
+ echo "3. 查看 Clash Verge 的日志,看是否有相关错误"
110
+ fi
111
+
fix_tun_mode.sh ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 修复 TUN 模式下的 SSH 连接 ==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo "混合代理端口: 7897"
9
+ echo ""
10
+
11
+ # 1. 检查 Clash Verge 的局域网连接设置
12
+ echo "1. 重要提示:"
13
+ echo " 请检查 Clash Verge 设置中的 '局域网连接' 选项"
14
+ echo " 如果未启用,WSL 无法访问代理端口"
15
+ echo " 路径:设置 -> Clash 设置 -> 局域网连接"
16
+ echo ""
17
+ read -p "局域网连接已启用?(y/n): " lan_enabled
18
+ if [ "$lan_enabled" != "y" ] && [ "$lan_enabled" != "Y" ]; then
19
+ echo ""
20
+ echo "⚠️ 请先启用 '局域网连接',然后重新运行此脚本"
21
+ exit 1
22
+ fi
23
+ echo ""
24
+
25
+ # 2. 测试端口连接
26
+ echo "2. 测试端口连接..."
27
+ if timeout 3 bash -c "echo > /dev/tcp/$WSL_HOST_IP/7897" 2>/dev/null; then
28
+ echo "✓ 端口 7897 可达"
29
+ else
30
+ echo "✗ 端口 7897 不可达"
31
+ echo ""
32
+ echo "可能的原因:"
33
+ echo "1. Clash Verge 的 '局域网连接' 未启用"
34
+ echo "2. Windows 防火墙阻止了端口"
35
+ echo "3. Clash Verge 未运行"
36
+ echo ""
37
+ echo "请检查后重试"
38
+ exit 1
39
+ fi
40
+ echo ""
41
+
42
+ # 3. 测试代理功能
43
+ echo "3. 测试代理功能..."
44
+ export http_proxy=http://$WSL_HOST_IP:7897
45
+ export https_proxy=http://$WSL_HOST_IP:7897
46
+
47
+ echo "测试 HTTP 代理..."
48
+ if timeout 5 curl -s --proxy "$http_proxy" https://www.google.com > /dev/null 2>&1; then
49
+ echo "✓ HTTP 代理工作正常"
50
+ HTTP_WORKS=true
51
+ else
52
+ echo "✗ HTTP 代理测试失败"
53
+ HTTP_WORKS=false
54
+ fi
55
+ echo ""
56
+
57
+ # 4. 配置 SSH(使用 connect-proxy)
58
+ echo "4. 配置 SSH..."
59
+ SSH_CONFIG="$HOME/.ssh/config"
60
+ KEY_PATH="$HOME/.ssh/id_ed25519"
61
+
62
+ # 确保 connect-proxy 已安装
63
+ if ! command -v connect-proxy > /dev/null 2>&1; then
64
+ echo "安装 connect-proxy..."
65
+ sudo apt-get update -qq
66
+ sudo apt-get install -y connect-proxy
67
+ fi
68
+
69
+ # 备份
70
+ if [ -f "$SSH_CONFIG" ]; then
71
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
72
+ fi
73
+
74
+ # 删除旧的 hf.co 配置
75
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
76
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
77
+ fi
78
+
79
+ # 添加配置
80
+ cat >> "$SSH_CONFIG" << EOF
81
+
82
+ # Hugging Face SSH 配置(通过混合代理端口 7897)
83
+ Host hf.co
84
+ HostName hf.co
85
+ User git
86
+ Port 443
87
+ IdentityFile $KEY_PATH
88
+ IdentitiesOnly yes
89
+ StrictHostKeyChecking accept-new
90
+ ConnectTimeout 15
91
+ ProxyCommand connect-proxy -H $WSL_HOST_IP:7897 %h %p
92
+ ServerAliveInterval 30
93
+ ServerAliveCountMax 3
94
+ TCPKeepAlive yes
95
+ LogLevel ERROR
96
+ EOF
97
+
98
+ chmod 600 "$SSH_CONFIG"
99
+ chmod 600 "$KEY_PATH"
100
+ chmod 644 "$KEY_PATH.pub"
101
+
102
+ echo "✓ SSH 配置已完成"
103
+ echo ""
104
+
105
+ # 5. 测试 SSH 连接
106
+ echo "5. 测试 SSH 连接..."
107
+ echo "(这可能需要几秒钟)"
108
+ timeout 20 ssh -T -v [email protected] 2>&1 | tee /tmp/ssh_test.log
109
+
110
+ SSH_EXIT=${PIPESTATUS[0]}
111
+
112
+ echo ""
113
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
114
+ echo "✓ SSH 连接成功!"
115
+ echo ""
116
+ echo "=== 配置完成 ==="
117
+ echo "现在可以正常使用 git push 了"
118
+ else
119
+ echo "✗ SSH 连接失败"
120
+ echo ""
121
+ echo "查看详细日志:"
122
+ grep -E "(Connecting|Authenticated|successfully|Connection|timeout|error|failed)" /tmp/ssh_test.log | head -10
123
+ echo ""
124
+ echo "如果仍然失败,请检查:"
125
+ echo "1. Clash Verge 的 '局域网连接' 是否已启用并保存"
126
+ echo "2. Windows 防火墙是否允许端口 7897"
127
+ echo "3. 尝试重启 Clash Verge"
128
+ fi
129
+
fix_use_port_22.sh ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 配置 SSH 使用端口 22(已测试成功)==="
4
+ echo ""
5
+
6
+ SSH_CONFIG="$HOME/.ssh/config"
7
+ KEY_PATH="$HOME/.ssh/id_ed25519"
8
+
9
+ # 备份配置
10
+ if [ -f "$SSH_CONFIG" ]; then
11
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
12
+ echo "✓ 已备份现有配置"
13
+ fi
14
+
15
+ # 删除旧的 hf.co 配置
16
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
17
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
18
+ echo "✓ 已删除旧的 hf.co 配置"
19
+ fi
20
+
21
+ # 添加新配置(使用端口 22)
22
+ echo "配置 SSH(使用端口 22)..."
23
+ cat >> "$SSH_CONFIG" << EOF
24
+
25
+ # Hugging Face SSH 配置(端口 22,已测试成功)
26
+ Host hf.co
27
+ HostName hf.co
28
+ User git
29
+ Port 22
30
+ IdentityFile $KEY_PATH
31
+ IdentitiesOnly yes
32
+ StrictHostKeyChecking accept-new
33
+ ConnectTimeout 30
34
+ ServerAliveInterval 20
35
+ ServerAliveCountMax 5
36
+ TCPKeepAlive yes
37
+ EOF
38
+
39
+ chmod 600 "$SSH_CONFIG"
40
+ chmod 600 "$KEY_PATH"
41
+ chmod 644 "$KEY_PATH.pub"
42
+
43
+ echo "✓ SSH 配置已完成(端口 22)"
44
+ echo ""
45
+
46
+ # 显示配置
47
+ echo "当前配置:"
48
+ grep -A 10 "Host hf.co" "$SSH_CONFIG"
49
+ echo ""
50
+
51
+ # 测试连接
52
+ echo "测试 SSH 连接(端口 22)..."
53
+ timeout 40 ssh -T [email protected] 2>&1
54
+ SSH_EXIT=$?
55
+
56
+ echo ""
57
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
58
+ if ! timeout 40 ssh -T [email protected] 2>&1 | grep -qi "timeout\|refused"; then
59
+ echo "✓ SSH 连接成功!"
60
+ echo ""
61
+ echo "=== 配置完成 ==="
62
+ echo "现在可以正常使用 git push 了"
63
+ echo ""
64
+ echo "测试推送:"
65
+ echo " git push"
66
+ exit 0
67
+ fi
68
+ fi
69
+
70
+ echo "如果连接失败,请检查:"
71
+ echo "1. SSH 公钥是否已添加到 Hugging Face"
72
+ echo "2. Clash Verge 的规则是否正确配置"
73
+ echo "3. 网络连接是否正常"
74
+
install_proxy_tools.sh ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 安装 SSH 代理工具 ==="
4
+ echo ""
5
+
6
+ echo "选择要安装的工具:"
7
+ echo "1. connect-proxy (HTTP 代理,推荐)"
8
+ echo "2. socat (SOCKS5 代理)"
9
+ echo "3. proxychains4 (通用代理工具)"
10
+ echo "4. 全部安装"
11
+ echo ""
12
+ read -p "请选择 (1-4): " choice
13
+
14
+ case $choice in
15
+ 1)
16
+ echo "安装 connect-proxy..."
17
+ sudo apt-get update
18
+ sudo apt-get install -y connect-proxy
19
+ ;;
20
+ 2)
21
+ echo "安装 socat..."
22
+ sudo apt-get update
23
+ sudo apt-get install -y socat
24
+ ;;
25
+ 3)
26
+ echo "安装 proxychains4..."
27
+ sudo apt-get update
28
+ sudo apt-get install -y proxychains4
29
+ ;;
30
+ 4)
31
+ echo "安装所有工具..."
32
+ sudo apt-get update
33
+ sudo apt-get install -y connect-proxy socat proxychains4
34
+ ;;
35
+ *)
36
+ echo "无效选择"
37
+ exit 1
38
+ ;;
39
+ esac
40
+
41
+ echo ""
42
+ echo "✓ 安装完成"
43
+ echo ""
44
+ echo "现在运行诊断脚本:"
45
+ echo " ./diagnose_and_fix.sh"
46
+
quick_add_rules.sh ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== Clash Verge 规则配置助手 ==="
4
+ echo ""
5
+
6
+ echo "为了确保 SSH 连接到 hf.co 能够正常工作,"
7
+ echo "需要在 Clash Verge 中添加以下规则:"
8
+ echo ""
9
+
10
+ echo "规则 1(推荐):"
11
+ echo " DOMAIN-SUFFIX,hf.co,PROXY"
12
+ echo ""
13
+
14
+ echo "规则 2(可选,更精确):"
15
+ echo " IP-CIDR,198.18.0.69/32,PROXY"
16
+ echo " 或"
17
+ echo " IP-CIDR,198.18.0.0/16,PROXY"
18
+ echo ""
19
+
20
+ echo "=== 配置步骤 ==="
21
+ echo ""
22
+ echo "方法 1: 通过界面(最简单)"
23
+ echo "1. 打开 Clash Verge"
24
+ echo "2. 点击左侧 '规则' 图标"
25
+ echo "3. 点击 '+' 或 '添加规则'"
26
+ echo "4. 添加规则: DOMAIN-SUFFIX,hf.co,PROXY"
27
+ echo "5. 保存配置"
28
+ echo ""
29
+
30
+ echo "方法 2: 临时测试(全局代理)"
31
+ echo "1. 打开 Clash Verge"
32
+ echo "2. 点击 '连接' 或 '代理'"
33
+ echo "3. 设置模式为 '全局代理'"
34
+ echo "4. 测试 SSH: ssh -T [email protected]"
35
+ echo "5. 如果成功,说明需要添加规则"
36
+ echo ""
37
+
38
+ echo "方法 3: 编辑配置文件"
39
+ echo "1. 在 Clash Verge 设置中查看配置目录路径"
40
+ echo "2. 打开当前使用的配置文件(.yaml 文件)"
41
+ echo "3. 在 rules: 部分顶部添加:"
42
+ echo " - DOMAIN-SUFFIX,hf.co,PROXY"
43
+ echo "4. 保存并重新加载配置"
44
+ echo ""
45
+
46
+ echo "=== 验证规则是否生效 ==="
47
+ echo ""
48
+ echo "配置规则后,可以:"
49
+ echo "1. 查看 Clash Verge 的日志,看是否有 hf.co 的连接记录"
50
+ echo "2. 测试 SSH 连接: ssh -T [email protected]"
51
+ echo "3. 如果连接成功,说明规则配置正确"
52
+ echo ""
53
+
quick_setup_7897.sh ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 快速配置 SSH 使用混合代理端口 7897 ==="
4
+ echo ""
5
+
6
+ # 获取 Windows 主机 IP
7
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
8
+ echo "Windows 主机 IP: $WSL_HOST_IP"
9
+ echo "混合代理端口: 7897"
10
+ echo ""
11
+
12
+ # 检查 SSH key
13
+ if [ ! -f ~/.ssh/id_ed25519 ]; then
14
+ echo "✗ 未找到 SSH key: ~/.ssh/id_ed25519"
15
+ exit 1
16
+ fi
17
+
18
+ KEY_PATH="$HOME/.ssh/id_ed25519"
19
+ echo "✓ 找到 SSH key"
20
+ echo ""
21
+
22
+ # 检查 nc 命令
23
+ if ! command -v nc > /dev/null 2>&1; then
24
+ echo "⚠️ 未找到 nc (netcat) 命令"
25
+ echo "正在安装 netcat-openbsd..."
26
+ sudo apt-get update -qq > /dev/null 2>&1
27
+ sudo apt-get install -y netcat-openbsd > /dev/null 2>&1
28
+ if [ $? -eq 0 ]; then
29
+ echo "✓ 已安装 netcat-openbsd"
30
+ else
31
+ echo "✗ 安装失败,请手动安装: sudo apt-get install netcat-openbsd"
32
+ exit 1
33
+ fi
34
+ fi
35
+ echo ""
36
+
37
+ # 配置 SSH
38
+ SSH_CONFIG="$HOME/.ssh/config"
39
+ mkdir -p ~/.ssh
40
+ chmod 700 ~/.ssh
41
+
42
+ # 备份
43
+ if [ -f "$SSH_CONFIG" ]; then
44
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
45
+ fi
46
+
47
+ # 删除旧的 hf.co 配置
48
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
49
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
50
+ fi
51
+
52
+ # 添加新配置
53
+ cat >> "$SSH_CONFIG" << EOF
54
+
55
+ # Hugging Face SSH 配置(混合代理端口 7897)
56
+ Host hf.co
57
+ HostName hf.co
58
+ User git
59
+ Port 443
60
+ IdentityFile $KEY_PATH
61
+ IdentitiesOnly yes
62
+ StrictHostKeyChecking accept-new
63
+ ConnectTimeout 10
64
+ ProxyCommand nc -X 5 -x $WSL_HOST_IP:7897 %h %p
65
+ ServerAliveInterval 60
66
+ ServerAliveCountMax 3
67
+ TCPKeepAlive yes
68
+ LogLevel ERROR
69
+ EOF
70
+
71
+ chmod 600 "$SSH_CONFIG"
72
+ chmod 600 "$KEY_PATH"
73
+ chmod 644 "$KEY_PATH.pub"
74
+
75
+ echo "✓ SSH 配置已完成"
76
+ echo ""
77
+
78
+ # 显示公钥
79
+ echo "请确认 SSH 公钥已添加到 Hugging Face:"
80
+ echo "https://huggingface.co/settings/keys"
81
+ echo ""
82
+ cat ~/.ssh/id_ed25519.pub
83
+ echo ""
84
+
85
+ read -p "公钥已添加?(y/n): " key_added
86
+ if [ "$key_added" != "y" ] && [ "$key_added" != "Y" ]; then
87
+ echo "请先添加公钥,然后运行: ssh -T [email protected]"
88
+ exit 1
89
+ fi
90
+
91
+ # 测试连接
92
+ echo ""
93
+ echo "测试 SSH 连接..."
94
+ timeout 15 ssh -T [email protected] 2>&1
95
+ SSH_EXIT=$?
96
+
97
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
98
+ echo ""
99
+ echo "✓ SSH 连接成功!"
100
+ echo ""
101
+ echo "=== 配置完成 ==="
102
+ echo "现在可以正常使用 git push 了"
103
+ else
104
+ echo ""
105
+ echo "✗ SSH 连接失败"
106
+ echo ""
107
+ echo "请检查:"
108
+ echo "1. Clash Verge 是否正在运行"
109
+ echo "2. 混合代理端口是否为 7897"
110
+ echo "3. SSH 公钥是否已添加到 Hugging Face"
111
+ echo ""
112
+ echo "手动测试:"
113
+ echo " ssh -T [email protected]"
114
+ fi
115
+
quick_test.sh ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 快速 SSH 连接测试 ==="
4
+ echo ""
5
+
6
+ echo "测试 1: 使用超时和详细输出(端口 443)"
7
+ timeout 10 ssh -vT -o ConnectTimeout=5 -o StrictHostKeyChecking=no [email protected] 2>&1 | head -20
8
+ echo ""
9
+
10
+ echo "测试 2: 检查 SSH 配置"
11
+ if [ -f ~/.ssh/config ]; then
12
+ echo "当前 hf.co 配置:"
13
+ grep -A 10 "Host hf.co" ~/.ssh/config
14
+ else
15
+ echo "~/.ssh/config 不存在"
16
+ fi
17
+ echo ""
18
+
19
+ echo "测试 3: 检查 SSH key"
20
+ if [ -f ~/.ssh/id_ed25519 ]; then
21
+ echo "✓ SSH key 存在"
22
+ ls -lh ~/.ssh/id_ed25519*
23
+ else
24
+ echo "✗ SSH key 不存在"
25
+ fi
26
+
remove_proxy_and_test.sh ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 移除代理配置,使用 TUN 模式自动代理 ==="
4
+ echo ""
5
+
6
+ SSH_CONFIG="$HOME/.ssh/config"
7
+ KEY_PATH="$HOME/.ssh/id_ed25519"
8
+
9
+ # 备份配置
10
+ if [ -f "$SSH_CONFIG" ]; then
11
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
12
+ echo "✓ 已备份现有配置"
13
+ fi
14
+
15
+ # 删除旧的 hf.co 配置
16
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
17
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
18
+ echo "✓ 已删除旧的 hf.co 配置"
19
+ fi
20
+
21
+ # 添加新配置(不使用任何代理)
22
+ echo "配置 SSH(直接连接,完全依赖 TUN 模式)..."
23
+ cat >> "$SSH_CONFIG" << EOF
24
+
25
+ # Hugging Face SSH 配置(TUN 模式自动代理,不使用 ProxyCommand)
26
+ Host hf.co
27
+ HostName hf.co
28
+ User git
29
+ Port 443
30
+ IdentityFile $KEY_PATH
31
+ IdentitiesOnly yes
32
+ StrictHostKeyChecking accept-new
33
+ ConnectTimeout 30
34
+ ServerAliveInterval 20
35
+ ServerAliveCountMax 5
36
+ TCPKeepAlive yes
37
+ LogLevel INFO
38
+ EOF
39
+
40
+ chmod 600 "$SSH_CONFIG"
41
+ chmod 600 "$KEY_PATH"
42
+ chmod 644 "$KEY_PATH.pub"
43
+
44
+ echo "✓ SSH 配置已完成(无 ProxyCommand)"
45
+ echo ""
46
+
47
+ # 验证配置
48
+ echo "当前 SSH 配置:"
49
+ grep -A 15 "Host hf.co" "$SSH_CONFIG"
50
+ echo ""
51
+
52
+ # 确认没有 ProxyCommand
53
+ if grep -q "ProxyCommand" "$SSH_CONFIG" 2>/dev/null; then
54
+ echo "⚠️ 警告:配置中仍有 ProxyCommand,这不应该存在"
55
+ grep "ProxyCommand" "$SSH_CONFIG"
56
+ else
57
+ echo "✓ 确认:配置中没有 ProxyCommand"
58
+ fi
59
+ echo ""
60
+
61
+ # 测试连接
62
+ echo "测试 SSH 连接(直接连接,依赖 TUN 模式)..."
63
+ echo "(这可能需要 10-20 秒)"
64
+ echo ""
65
+
66
+ timeout 30 ssh -T -v [email protected] 2>&1 | tee /tmp/ssh_test_no_proxy.log
67
+ SSH_EXIT=${PIPESTATUS[0]}
68
+
69
+ echo ""
70
+ echo "---"
71
+
72
+ # 分析结果
73
+ if grep -qi "successfully authenticated\|you've successfully authenticated\|welcome" /tmp/ssh_test_no_proxy.log; then
74
+ echo "✓ SSH 连接成功!"
75
+ echo ""
76
+ echo "=== 配置完成 ==="
77
+ echo "现在可以正常使用 git push 了"
78
+ exit 0
79
+ elif [ $SSH_EXIT -eq 1 ] && ! grep -qi "timeout\|refused\|connection closed" /tmp/ssh_test_no_proxy.log; then
80
+ echo "✓ SSH 连接可能成功(退出码 1 但无超时错误,这是正常的)"
81
+ echo ""
82
+ echo "可以尝试推送:"
83
+ echo " git push"
84
+ exit 0
85
+ else
86
+ echo "✗ SSH 连接仍然失败"
87
+ echo ""
88
+ echo "查看详细错误:"
89
+ grep -E "(timeout|refused|closed|error|failed|banner)" /tmp/ssh_test_no_proxy.log | head -10
90
+ echo ""
91
+ echo "可能的原因:"
92
+ echo "1. TUN 模式可能没有正确代理 SSH 流量"
93
+ echo "2. Clash Verge 的规则可能阻止了 SSH 连接"
94
+ echo "3. 需要检查 Clash Verge 的 TUN 模式配置"
95
+ echo ""
96
+ echo "建议:"
97
+ echo "1. 在 Clash Verge 中检查 TUN 模式是否完全启用"
98
+ echo "2. 查看 Clash Verge 的日志,看是否有 hf.co 的连接记录"
99
+ echo "3. 尝试在 Clash Verge 中临时设置为全局代理模式测试"
100
+ fi
101
+
setup_ssh.sh ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 配置 Hugging Face SSH 连接 ==="
4
+ echo ""
5
+
6
+ # 1. 检查并创建 SSH 目录
7
+ echo "1. 检查 SSH 目录..."
8
+ mkdir -p ~/.ssh
9
+ chmod 700 ~/.ssh
10
+ echo "✓ SSH 目录已准备"
11
+ echo ""
12
+
13
+ # 2. 检查 SSH key
14
+ echo "2. 检查 SSH key..."
15
+ if [ -f ~/.ssh/id_ed25519.pub ]; then
16
+ echo "✓ 找到 id_ed25519.pub"
17
+ SSH_KEY_FILE="~/.ssh/id_ed25519"
18
+ SSH_PUB_KEY="~/.ssh/id_ed25519.pub"
19
+ elif [ -f ~/.ssh/id_rsa.pub ]; then
20
+ echo "✓ 找到 id_rsa.pub"
21
+ SSH_KEY_FILE="~/.ssh/id_rsa"
22
+ SSH_PUB_KEY="~/.ssh/id_rsa.pub"
23
+ else
24
+ echo "✗ 未找到 SSH key,正在生成..."
25
+ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C "huggingface"
26
+ SSH_KEY_FILE="~/.ssh/id_ed25519"
27
+ SSH_PUB_KEY="~/.ssh/id_ed25519.pub"
28
+ echo "✓ 已生成新的 SSH key"
29
+ fi
30
+ echo ""
31
+
32
+ # 3. 显示公钥
33
+ echo "3. 你的 SSH 公钥(请复制并添加到 Hugging Face):"
34
+ echo "----------------------------------------"
35
+ if [ -f ~/.ssh/id_ed25519.pub ]; then
36
+ cat ~/.ssh/id_ed25519.pub
37
+ elif [ -f ~/.ssh/id_rsa.pub ]; then
38
+ cat ~/.ssh/id_rsa.pub
39
+ fi
40
+ echo "----------------------------------------"
41
+ echo ""
42
+ echo "⚠️ 请访问 https://huggingface.co/settings/keys 添加上述公钥"
43
+ echo " 按 Enter 继续(添加完公钥后)..."
44
+ read
45
+ echo ""
46
+
47
+ # 4. 配置 SSH config
48
+ echo "4. 配置 SSH config..."
49
+ SSH_CONFIG="$HOME/.ssh/config"
50
+
51
+ # 备份现有配置
52
+ if [ -f "$SSH_CONFIG" ]; then
53
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
54
+ echo "✓ 已备份现有配置"
55
+ fi
56
+
57
+ # 确定使用的 key 文件
58
+ if [ -f ~/.ssh/id_ed25519 ]; then
59
+ KEY_PATH="$HOME/.ssh/id_ed25519"
60
+ elif [ -f ~/.ssh/id_rsa ]; then
61
+ KEY_PATH="$HOME/.ssh/id_rsa"
62
+ fi
63
+
64
+ # 添加或更新 hf.co 配置
65
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
66
+ echo "✓ 更新现有 hf.co 配置"
67
+ # 删除旧的 hf.co 配置块
68
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
69
+ fi
70
+
71
+ # 添加新配置
72
+ cat >> "$SSH_CONFIG" << EOF
73
+
74
+ # Hugging Face SSH 配置
75
+ Host hf.co
76
+ HostName hf.co
77
+ User git
78
+ Port 22
79
+ IdentityFile $KEY_PATH
80
+ IdentitiesOnly yes
81
+ StrictHostKeyChecking accept-new
82
+ EOF
83
+
84
+ chmod 600 "$SSH_CONFIG"
85
+ echo "✓ SSH config 已配置(端口 22)"
86
+ echo ""
87
+
88
+ # 5. 设置 key 文件权限
89
+ echo "5. 设置文件权限..."
90
+ chmod 600 "$KEY_PATH"
91
+ chmod 644 "$KEY_PATH.pub"
92
+ echo "✓ 权限已设置"
93
+ echo ""
94
+
95
+ # 6. 测试 SSH 连接(端口 22)
96
+ echo "6. 测试 SSH 连接(端口 22)..."
97
+ if ssh -T [email protected] 2>&1 | grep -q "successfully authenticated"; then
98
+ echo "✓ SSH 连接成功!"
99
+ echo ""
100
+ echo "=== 配置完成 ==="
101
+ echo "现在可以正常使用 git push 了"
102
+ exit 0
103
+ else
104
+ echo "✗ 端口 22 连接失败,尝试配置端口 443..."
105
+ echo ""
106
+
107
+ # 更新配置为端口 443
108
+ sed -i 's/Port 22/Port 443/' "$SSH_CONFIG"
109
+ echo "✓ 已更新为端口 443"
110
+ echo ""
111
+
112
+ echo "7. 测试 SSH 连接(端口 443)..."
113
+ if ssh -T [email protected] 2>&1 | grep -q "successfully authenticated"; then
114
+ echo "✓ SSH 连接成功(使用端口 443)!"
115
+ echo ""
116
+ echo "=== 配置完成 ==="
117
+ echo "现在可以正常使用 git push 了"
118
+ exit 0
119
+ else
120
+ echo "✗ 端口 443 也连接失败"
121
+ echo ""
122
+ echo "请检查:"
123
+ echo "1. SSH 公钥是否已添加到 https://huggingface.co/settings/keys"
124
+ echo "2. 网络连接是否正常"
125
+ echo "3. 防火墙是否阻止了连接"
126
+ echo ""
127
+ echo "可以手动测试:"
128
+ echo " ssh -T [email protected]"
129
+ exit 1
130
+ fi
131
+ fi
132
+
setup_ssh_with_proxy.sh ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 配置 SSH 通过 Clash Verge 代理连接 ==="
4
+ echo ""
5
+
6
+ # 1. 检查 Clash 代理设置
7
+ echo "1. 检查代理配置..."
8
+ echo "检查环境变量:"
9
+ echo " http_proxy: ${http_proxy:-未设置}"
10
+ echo " https_proxy: ${https_proxy:-未设置}"
11
+ echo " all_proxy: ${all_proxy:-未设置}"
12
+ echo ""
13
+
14
+ # 2. 检测 Clash 代理地址(通常是 Windows 主机的 IP)
15
+ echo "2. 检测 Clash 代理地址..."
16
+ WSL_HOST_IP=$(ip route show | grep -i default | awk '{ print $3}' | head -1)
17
+ echo "检测到的 WSL 网关 IP: $WSL_HOST_IP"
18
+
19
+ # Clash 混合代理端口(同时支持 HTTP 和 SOCKS5)
20
+ CLASH_MIXED_PORT=7897
21
+
22
+ echo "使用混合代理端口: $CLASH_MIXED_PORT"
23
+ PROXY_HOST=$WSL_HOST_IP
24
+ PROXY_PORT=$CLASH_MIXED_PORT
25
+
26
+ # 测试端口是否可达
27
+ if timeout 2 bash -c "echo > /dev/tcp/$WSL_HOST_IP/$CLASH_MIXED_PORT" 2>/dev/null; then
28
+ echo "✓ 混合代理端口 $CLASH_MIXED_PORT 可达"
29
+ else
30
+ echo "⚠️ 无法连接到端口 $CLASH_MIXED_PORT,请确认 Clash Verge 配置"
31
+ read -p " 继续配置?(y/n): " continue_setup
32
+ if [ "$continue_setup" != "y" ] && [ "$continue_setup" != "Y" ]; then
33
+ exit 1
34
+ fi
35
+ fi
36
+ echo ""
37
+
38
+ # 3. 检查 SSH key
39
+ echo "3. 检查 SSH key..."
40
+ if [ -f ~/.ssh/id_ed25519.pub ]; then
41
+ echo "✓ 找到 SSH 公钥"
42
+ KEY_PATH="$HOME/.ssh/id_ed25519"
43
+ echo "公钥:"
44
+ cat ~/.ssh/id_ed25519.pub
45
+ echo ""
46
+ echo "⚠️ 请确认此公钥已添加到:https://huggingface.co/settings/keys"
47
+ read -p "公钥已添加?(y/n): " key_added
48
+ if [ "$key_added" != "y" ] && [ "$key_added" != "Y" ]; then
49
+ echo "请先添加公钥"
50
+ exit 1
51
+ fi
52
+ else
53
+ echo "✗ 未找到 SSH key"
54
+ exit 1
55
+ fi
56
+ echo ""
57
+
58
+ # 4. 配置 SSH config
59
+ echo "4. 配置 SSH config..."
60
+ SSH_CONFIG="$HOME/.ssh/config"
61
+
62
+ # 备份
63
+ if [ -f "$SSH_CONFIG" ]; then
64
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
65
+ echo "✓ 已备份现有配置"
66
+ fi
67
+
68
+ # 删除旧的 hf.co 配置
69
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
70
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
71
+ fi
72
+
73
+ # 使用混合代理端口(支持 SOCKS5)
74
+ # 优先使用 SOCKS5,因为 SSH 对 SOCKS5 支持更好
75
+ if command -v nc > /dev/null 2>&1; then
76
+ cat >> "$SSH_CONFIG" << EOF
77
+
78
+ # Hugging Face SSH 配置(通过混合代理端口 7897,使用 SOCKS5)
79
+ Host hf.co
80
+ HostName hf.co
81
+ User git
82
+ Port 443
83
+ IdentityFile $KEY_PATH
84
+ IdentitiesOnly yes
85
+ StrictHostKeyChecking accept-new
86
+ ConnectTimeout 10
87
+ ProxyCommand nc -X 5 -x $PROXY_HOST:$PROXY_PORT %h %p
88
+ ServerAliveInterval 60
89
+ ServerAliveCountMax 3
90
+ TCPKeepAlive yes
91
+ LogLevel ERROR
92
+ EOF
93
+ echo "✓ 已配置使用 SOCKS5 通过混合代理端口 $PROXY_PORT"
94
+ elif command -v connect-proxy > /dev/null 2>&1; then
95
+ # 如果没有 nc,尝试使用 connect-proxy(HTTP 代理)
96
+ cat >> "$SSH_CONFIG" << EOF
97
+
98
+ # Hugging Face SSH 配置(通过混合代理端口 7897,使用 HTTP)
99
+ Host hf.co
100
+ HostName hf.co
101
+ User git
102
+ Port 443
103
+ IdentityFile $KEY_PATH
104
+ IdentitiesOnly yes
105
+ StrictHostKeyChecking accept-new
106
+ ConnectTimeout 10
107
+ ProxyCommand connect-proxy -H $PROXY_HOST:$PROXY_PORT %h %p
108
+ ServerAliveInterval 60
109
+ ServerAliveCountMax 3
110
+ TCPKeepAlive yes
111
+ LogLevel ERROR
112
+ EOF
113
+ echo "✓ 已配置使用 HTTP 通过混合代理端口 $PROXY_PORT"
114
+ else
115
+ # 如果没有代理工具,依赖 TUN 模式自动代理
116
+ cat >> "$SSH_CONFIG" << EOF
117
+
118
+ # Hugging Face SSH 配置(TUN 模式,自动代理)
119
+ Host hf.co
120
+ HostName hf.co
121
+ User git
122
+ Port 443
123
+ IdentityFile $KEY_PATH
124
+ IdentitiesOnly yes
125
+ StrictHostKeyChecking accept-new
126
+ ConnectTimeout 10
127
+ ServerAliveInterval 60
128
+ ServerAliveCountMax 3
129
+ TCPKeepAlive yes
130
+ LogLevel ERROR
131
+ EOF
132
+ echo "⚠️ 未找到 nc 或 connect-proxy,使用 TUN 模式自动代理"
133
+ echo " 建议安装 netcat-openbsd: sudo apt-get install netcat-openbsd"
134
+ fi
135
+
136
+ chmod 600 "$SSH_CONFIG"
137
+ echo "✓ SSH config 已配置"
138
+ echo ""
139
+
140
+ # 5. 设置 key 权限
141
+ chmod 600 "$KEY_PATH"
142
+ chmod 644 "$KEY_PATH.pub"
143
+ echo "✓ 文件权限已设置"
144
+ echo ""
145
+
146
+ # 6. 测试连接
147
+ echo "5. 测试 SSH 连接(10秒超时)..."
148
+ echo "如果 TUN 模式正常工作,应该能自动通过代理连接"
149
+ echo ""
150
+
151
+ timeout 15 ssh -T -o ConnectTimeout=10 [email protected] 2>&1
152
+ SSH_EXIT=$?
153
+
154
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
155
+ echo ""
156
+ echo "✓ SSH 连接成功!"
157
+ echo ""
158
+ echo "=== 配置完成 ==="
159
+ echo "现在可以正常使用 git push 了"
160
+ else
161
+ echo ""
162
+ echo "✗ SSH 连接失败"
163
+ echo ""
164
+ echo "可能的原因:"
165
+ echo "1. Clash Verge TUN 模式未正确配置"
166
+ echo "2. 需要手动设置代理环境变量"
167
+ echo ""
168
+ echo "尝试设置代理环境变量:"
169
+ echo " export http_proxy=http://$PROXY_HOST:$PROXY_PORT"
170
+ echo " export https_proxy=http://$PROXY_HOST:$PROXY_PORT"
171
+ echo " export all_proxy=socks5://$PROXY_HOST:$PROXY_PORT"
172
+ echo ""
173
+ echo "或者检查 Clash Verge 的 TUN 模式设置"
174
+ fi
175
+
simple_ssh_config.sh ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 简化 SSH 配置(尝试最简单的方法)==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo ""
9
+
10
+ # 检查并安装 connect-proxy
11
+ if ! command -v connect-proxy > /dev/null 2>&1; then
12
+ echo "安装 connect-proxy..."
13
+ sudo apt-get update -qq
14
+ sudo apt-get install -y connect-proxy
15
+ if [ $? -ne 0 ]; then
16
+ echo "✗ 安装失败"
17
+ exit 1
18
+ fi
19
+ fi
20
+
21
+ SSH_CONFIG="$HOME/.ssh/config"
22
+ KEY_PATH="$HOME/.ssh/id_ed25519"
23
+
24
+ # 备份
25
+ if [ -f "$SSH_CONFIG" ]; then
26
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
27
+ fi
28
+
29
+ # 删除旧的 hf.co 配置
30
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
31
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
32
+ fi
33
+
34
+ # 使用 connect-proxy 通过 HTTP 代理
35
+ cat >> "$SSH_CONFIG" << EOF
36
+
37
+ # Hugging Face SSH 配置(HTTP 代理 7897)
38
+ Host hf.co
39
+ HostName hf.co
40
+ User git
41
+ Port 443
42
+ IdentityFile $KEY_PATH
43
+ IdentitiesOnly yes
44
+ StrictHostKeyChecking accept-new
45
+ ConnectTimeout 15
46
+ ProxyCommand connect-proxy -H $WSL_HOST_IP:7897 %h %p
47
+ ServerAliveInterval 30
48
+ ServerAliveCountMax 3
49
+ TCPKeepAlive yes
50
+ EOF
51
+
52
+ chmod 600 "$SSH_CONFIG"
53
+ chmod 600 "$KEY_PATH"
54
+ chmod 644 "$KEY_PATH.pub"
55
+
56
+ echo "✓ SSH 配置已完成(使用 connect-proxy + HTTP 代理)"
57
+ echo ""
58
+
59
+ # 测试连接
60
+ echo "测试 SSH 连接..."
61
+ timeout 20 ssh -T -v [email protected] 2>&1 | grep -E "(Connecting|Authenticated|successfully|Connection|timeout|error|failed)" | head -10
62
+
63
+ SSH_EXIT=${PIPESTATUS[0]}
64
+
65
+ if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
66
+ echo ""
67
+ echo "✓ SSH 连接成功!"
68
+ echo ""
69
+ echo "现在可以正常使用 git push 了"
70
+ else
71
+ echo ""
72
+ echo "✗ SSH 连接失败"
73
+ echo ""
74
+ echo "请运行完整诊断:"
75
+ echo " ./diagnose_and_fix.sh"
76
+ fi
77
+
test_port_22.sh ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 测试端口 22 连接 ==="
4
+ echo ""
5
+
6
+ echo "根据之前的测试,端口 22 可以成功连接"
7
+ echo "现在测试最终配置..."
8
+ echo ""
9
+
10
+ # 测试连接
11
+ echo "测试 SSH 连接(端口 22)..."
12
+ ssh -T [email protected] 2>&1
13
+
14
+ EXIT_CODE=$?
15
+
16
+ echo ""
17
+ if [ $EXIT_CODE -eq 0 ] || [ $EXIT_CODE -eq 1 ]; then
18
+ echo "✓ 连接测试完成"
19
+ echo ""
20
+ echo "如果看到 'successfully authenticated' 或类似消息,说明配置成功"
21
+ echo "如果看到 'Permission denied',说明 SSH key 可能未添加"
22
+ echo ""
23
+ echo "现在可以尝试:"
24
+ echo " git push"
25
+ else
26
+ echo "✗ 连接失败"
27
+ echo ""
28
+ echo "请检查配置和网络连接"
29
+ fi
30
+
test_port_connection.sh ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 测试端口连接 ==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo ""
9
+
10
+ # 测试多个端口
11
+ echo "测试 Clash Verge 常用端口:"
12
+ for port in 7897 7890 7891; do
13
+ echo -n " 端口 $port: "
14
+ if timeout 2 bash -c "echo > /dev/tcp/$WSL_HOST_IP/$port" 2>/dev/null; then
15
+ echo "✓ 可达"
16
+ else
17
+ echo "✗ 不可达"
18
+ fi
19
+ done
20
+ echo ""
21
+
22
+ # 测试 ping
23
+ echo "测试到 Windows 主机的连接:"
24
+ if ping -c 2 -W 2 $WSL_HOST_IP > /dev/null 2>&1; then
25
+ echo "✓ Windows 主机可达"
26
+ else
27
+ echo "✗ Windows 主机不可达"
28
+ fi
29
+ echo ""
30
+
31
+ # 测试 DNS
32
+ echo "测试 DNS 解析:"
33
+ if nslookup hf.co > /dev/null 2>&1; then
34
+ echo "✓ DNS 解析正常"
35
+ HF_IP=$(nslookup hf.co | grep -A 1 "Name:" | tail -1 | awk '{print $2}')
36
+ echo " hf.co IP: $HF_IP"
37
+ else
38
+ echo "✗ DNS 解析失败"
39
+ fi
40
+ echo ""
41
+
42
+ # 测试直接连接 hf.co
43
+ echo "测试直接连接 hf.co:443:"
44
+ if timeout 3 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then
45
+ echo "✓ hf.co:443 可达(可能通过 TUN 模式)"
46
+ else
47
+ echo "✗ hf.co:443 不可达"
48
+ fi
49
+ echo ""
50
+
51
+ echo "如果端口 7897 不可达,请:"
52
+ echo "1. 检查 Clash Verge 的 '局域网连接' 是否已启用"
53
+ echo "2. 检查 Windows 防火墙设置"
54
+ echo "3. 确认 Clash Verge 正在运行"
55
+
test_socks5.sh ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 测试混合端口的 SOCKS5 功能 ==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo "混合代理端口: 7897"
9
+ echo ""
10
+
11
+ # 测试 SOCKS5
12
+ echo "1. 测试 SOCKS5 代理..."
13
+ if command -v curl > /dev/null 2>&1; then
14
+ echo "使用 curl 测试 SOCKS5..."
15
+ timeout 10 curl -v --socks5-hostname $WSL_HOST_IP:7897 https://www.google.com 2>&1 | head -20
16
+ if [ $? -eq 0 ]; then
17
+ echo ""
18
+ echo "✓ SOCKS5 代理工作正常"
19
+ else
20
+ echo ""
21
+ echo "✗ SOCKS5 代理测试失败"
22
+ fi
23
+ else
24
+ echo "curl 未安装,跳过测试"
25
+ fi
26
+ echo ""
27
+
28
+ # 测试 HTTP 代理
29
+ echo "2. 测试 HTTP 代理..."
30
+ if command -v curl > /dev/null 2>&1; then
31
+ echo "使用 curl 测试 HTTP 代理..."
32
+ export http_proxy=http://$WSL_HOST_IP:7897
33
+ timeout 10 curl -v --proxy "$http_proxy" https://www.google.com 2>&1 | head -20
34
+ if [ $? -eq 0 ]; then
35
+ echo ""
36
+ echo "✓ HTTP 代理工作正常"
37
+ else
38
+ echo ""
39
+ echo "✗ HTTP 代理测试失败"
40
+ fi
41
+ else
42
+ echo "curl 未安装,跳过测试"
43
+ fi
44
+ echo ""
45
+
46
+ # 测试 nc 的 SOCKS5 支持
47
+ echo "3. 测试 nc 的 SOCKS5 功能..."
48
+ if command -v nc > /dev/null 2>&1; then
49
+ echo "测试 nc 是否支持 -X 选项..."
50
+ if nc -h 2>&1 | grep -q "\-X"; then
51
+ echo "✓ nc 支持 SOCKS 代理"
52
+ echo ""
53
+ echo "尝试通过 nc 连接..."
54
+ timeout 5 nc -X 5 -x $WSL_HOST_IP:7897 hf.co 443 < /dev/null
55
+ if [ $? -eq 0 ]; then
56
+ echo "✓ 通过 nc 的 SOCKS5 连接成功"
57
+ else
58
+ echo "✗ 通过 nc 的 SOCKS5 连接失败"
59
+ fi
60
+ else
61
+ echo "✗ nc 不支持 SOCKS 代理"
62
+ echo "可能需要安装 netcat-openbsd: sudo apt-get install netcat-openbsd"
63
+ fi
64
+ else
65
+ echo "✗ nc 未安装"
66
+ fi
67
+
test_ssh.sh ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 测试 Hugging Face SSH 连接 ==="
4
+ echo ""
5
+
6
+ echo "1. 测试端口 22:"
7
+ ssh -T -p 22 [email protected] 2>&1
8
+ echo ""
9
+
10
+ echo "2. 测试端口 443:"
11
+ ssh -T -p 443 [email protected] 2>&1
12
+ echo ""
13
+
14
+ echo "3. 当前 SSH 配置:"
15
+ if [ -f ~/.ssh/config ]; then
16
+ cat ~/.ssh/config | grep -A 5 "Host hf.co" || echo "未找到 hf.co 配置"
17
+ else
18
+ echo "~/.ssh/config 不存在"
19
+ fi
20
+ echo ""
21
+
22
+ echo "4. 可用的 SSH keys:"
23
+ ls -la ~/.ssh/*.pub 2>/dev/null || echo "未找到公钥文件"
24
+
test_ssh_detailed.sh ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 详细测试 SSH 连接 ==="
4
+ echo ""
5
+
6
+ echo "1. 测试 TCP 连接到 hf.co:443..."
7
+ if timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then
8
+ echo "✓ TCP 连接成功"
9
+ else
10
+ echo "✗ TCP 连接失败"
11
+ exit 1
12
+ fi
13
+ echo ""
14
+
15
+ echo "2. 测试端口 22..."
16
+ if timeout 5 bash -c "echo > /dev/tcp/hf.co/22" 2>/dev/null; then
17
+ echo "✓ 端口 22 可达"
18
+ PORT_22_AVAILABLE=true
19
+ else
20
+ echo "✗ 端口 22 不可达"
21
+ PORT_22_AVAILABLE=false
22
+ fi
23
+ echo ""
24
+
25
+ echo "3. 获取 hf.co 的 IP 地址..."
26
+ HF_IP=$(getent hosts hf.co | awk '{print $1}' | head -1)
27
+ if [ -n "$HF_IP" ]; then
28
+ echo "✓ hf.co IP: $HF_IP"
29
+ else
30
+ echo "✗ 无法解析 hf.co"
31
+ exit 1
32
+ fi
33
+ echo ""
34
+
35
+ echo "4. 测试使用 IP 地址连接..."
36
+ if timeout 5 bash -c "echo > /dev/tcp/$HF_IP/443" 2>/dev/null; then
37
+ echo "✓ 使用 IP 连接成功"
38
+ else
39
+ echo "✗ 使用 IP 连接失败"
40
+ fi
41
+ echo ""
42
+
43
+ echo "5. 测试 SSH 连接(端口 443,详细输出)..."
44
+ echo "开始测试(60秒超时)..."
45
+ timeout 60 ssh -vT -o ConnectTimeout=30 -p 443 [email protected] 2>&1 | tee /tmp/ssh_test_443.log | grep -E "(Connecting|established|banner|timeout|error|Authenticated|successfully)" | head -20
46
+ SSH_443_EXIT=${PIPESTATUS[0]}
47
+ echo ""
48
+
49
+ if [ "$PORT_22_AVAILABLE" = "true" ]; then
50
+ echo "6. 测试 SSH 连接(端口 22,详细输出)..."
51
+ echo "开始测试(60秒超时)..."
52
+ timeout 60 ssh -vT -o ConnectTimeout=30 -p 22 [email protected] 2>&1 | tee /tmp/ssh_test_22.log | grep -E "(Connecting|established|banner|timeout|error|Authenticated|successfully)" | head -20
53
+ SSH_22_EXIT=${PIPESTATUS[0]}
54
+ echo ""
55
+ fi
56
+
57
+ echo "7. 测试使用 IP 地址连接..."
58
+ timeout 60 ssh -vT -o ConnectTimeout=30 -p 443 git@$HF_IP 2>&1 | tee /tmp/ssh_test_ip.log | grep -E "(Connecting|established|banner|timeout|error|Authenticated|successfully)" | head -20
59
+ SSH_IP_EXIT=${PIPESTATUS[0]}
60
+ echo ""
61
+
62
+ echo "=== 测试结果汇总 ==="
63
+ echo ""
64
+ echo "端口 443: $([ $SSH_443_EXIT -eq 0 ] || [ $SSH_443_EXIT -eq 1 ] && echo '可能成功' || echo '失败')"
65
+ if [ "$PORT_22_AVAILABLE" = "true" ]; then
66
+ echo "端口 22: $([ $SSH_22_EXIT -eq 0 ] || [ $SSH_22_EXIT -eq 1 ] && echo '可能成功' || echo '失败')"
67
+ fi
68
+ echo "使用 IP: $([ $SSH_IP_EXIT -eq 0 ] || [ $SSH_IP_EXIT -eq 1 ] && echo '可能成功' || echo '失败')"
69
+ echo ""
70
+ echo "详细日志:"
71
+ echo " 端口 443: /tmp/ssh_test_443.log"
72
+ if [ "$PORT_22_AVAILABLE" = "true" ]; then
73
+ echo " 端口 22: /tmp/ssh_test_22.log"
74
+ fi
75
+ echo " 使用 IP: /tmp/ssh_test_ip.log"
76
+
test_ssh_proxy.sh ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 测试 SSH 连接(多种方式)==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep -i default | awk '{ print $3}' | head -1)
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo ""
9
+
10
+ # 测试 1: 直接连接(TUN 模式应该自动代理)
11
+ echo "测试 1: 直接连接(依赖 TUN 模式自动代理)"
12
+ timeout 10 ssh -T -o ConnectTimeout=5 -v [email protected] 2>&1 | grep -E "(Connecting|Authenticated|successfully|Connection|error)" | head -5
13
+ echo ""
14
+
15
+ # 测试 2: 通过混合代理端口 7897 (SOCKS5)
16
+ echo "测试 2: 通过混合代理端口 7897 (SOCKS5)"
17
+ if command -v nc > /dev/null 2>&1; then
18
+ timeout 10 ssh -T -o ConnectTimeout=5 \
19
+ -o ProxyCommand="nc -X 5 -x $WSL_HOST_IP:7897 %h %p" \
20
+ [email protected] 2>&1 | grep -E "(Connecting|Authenticated|successfully|Connection|error)" | head -5
21
+ else
22
+ echo " ✗ nc (netcat) 未安装,跳过此测试"
23
+ echo " 安装命令: sudo apt-get install netcat-openbsd"
24
+ fi
25
+ echo ""
26
+
27
+ # 测试 3: 设置代理环境变量后连接
28
+ echo "测试 3: 设置代理环境变量后连接(混合端口 7897)"
29
+ export http_proxy=http://$WSL_HOST_IP:7897
30
+ export https_proxy=http://$WSL_HOST_IP:7897
31
+ export all_proxy=socks5://$WSL_HOST_IP:7897
32
+ echo " 已设置代理环境变量"
33
+ timeout 10 ssh -T -o ConnectTimeout=5 [email protected] 2>&1 | grep -E "(Connecting|Authenticated|successfully|Connection|error)" | head -5
34
+ echo ""
35
+
36
+ # 测试 4: 使用端口 22
37
+ echo "测试 4: 尝试端口 22(通过代理)"
38
+ timeout 10 ssh -T -o ConnectTimeout=5 -p 22 [email protected] 2>&1 | grep -E "(Connecting|Authenticated|successfully|Connection|error)" | head -5
39
+
test_tun_mode.sh ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 测试 TUN 模式是否正常工作 ==="
4
+ echo ""
5
+
6
+ echo "1. 测试普通 HTTP/HTTPS 连接(应该通过 TUN 模式代理)..."
7
+ if timeout 10 curl -s https://www.google.com > /dev/null 2>&1; then
8
+ echo "✓ HTTP/HTTPS 连接正常(可能已通过 TUN 代理)"
9
+ else
10
+ echo "✗ HTTP/HTTPS 连接失败"
11
+ fi
12
+ echo ""
13
+
14
+ echo "2. 测试到 hf.co 的连接..."
15
+ if timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then
16
+ echo "✓ hf.co:443 可达"
17
+ HF_IP=$(getent hosts hf.co | awk '{print $1}' | head -1)
18
+ echo " hf.co 解析到的 IP: $HF_IP"
19
+ else
20
+ echo "✗ hf.co:443 不可达"
21
+ fi
22
+ echo ""
23
+
24
+ echo "3. 测试 DNS 解析..."
25
+ if nslookup hf.co > /dev/null 2>&1; then
26
+ echo "✓ DNS 解析正常"
27
+ NSLOOKUP_OUTPUT=$(nslookup hf.co 2>&1)
28
+ echo "$NSLOOKUP_OUTPUT" | grep -A 2 "Name:"
29
+ else
30
+ echo "✗ DNS 解析失败"
31
+ fi
32
+ echo ""
33
+
34
+ echo "4. 检查路由表(查看是否有 TUN 相关路由)..."
35
+ ip route show | grep -E "tun|172\.|198\." | head -5
36
+ echo ""
37
+
38
+ echo "5. 检查网络接口(查看是否有 TUN 接口)..."
39
+ ip addr show | grep -E "^[0-9]+:|tun|utun" | head -10
40
+ echo ""
41
+
42
+ echo "6. 测试 SSH 连接(详细输出)..."
43
+ echo "开始 SSH 连接测试(30秒超时)..."
44
+ timeout 30 ssh -vT [email protected] 2>&1 | tee /tmp/ssh_debug.log | grep -E "(Connecting|Authenticated|successfully|Connection|timeout|error|failed|banner)" | head -20
45
+
46
+ echo ""
47
+ echo "完整日志保存在: /tmp/ssh_debug.log"
48
+ echo "查看完整日志: cat /tmp/ssh_debug.log"
49
+
try_different_methods.sh ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ echo "=== 尝试不同的 SSH 连接方法 ==="
4
+ echo ""
5
+
6
+ WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
7
+ echo "Windows 主机 IP: $WSL_HOST_IP"
8
+ echo "混合代理端口: 7897"
9
+ echo ""
10
+
11
+ SSH_CONFIG="$HOME/.ssh/config"
12
+ KEY_PATH="$HOME/.ssh/id_ed25519"
13
+
14
+ # 备份配置
15
+ if [ -f "$SSH_CONFIG" ]; then
16
+ cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
17
+ fi
18
+
19
+ # 方法 1: 尝试 SOCKS5(混合端口通常也支持 SOCKS5)
20
+ echo "方法 1: 尝试使用 SOCKS5 通过混合端口..."
21
+ if command -v nc > /dev/null 2>&1; then
22
+ # 删除旧的 hf.co 配置
23
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
24
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
25
+ fi
26
+
27
+ cat >> "$SSH_CONFIG" << EOF
28
+
29
+ # Hugging Face SSH 配置(SOCKS5 via nc)
30
+ Host hf.co
31
+ HostName hf.co
32
+ User git
33
+ Port 443
34
+ IdentityFile $KEY_PATH
35
+ IdentitiesOnly yes
36
+ StrictHostKeyChecking accept-new
37
+ ConnectTimeout 15
38
+ ProxyCommand nc -X 5 -x $WSL_HOST_IP:7897 %h %p
39
+ ServerAliveInterval 30
40
+ ServerAliveCountMax 3
41
+ TCPKeepAlive yes
42
+ EOF
43
+ chmod 600 "$SSH_CONFIG"
44
+
45
+ echo "测试连接..."
46
+ timeout 20 ssh -T [email protected] 2>&1 | head -10
47
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
48
+ echo ""
49
+ echo "✓ 方法 1 成功!使用 SOCKS5"
50
+ exit 0
51
+ fi
52
+ echo "✗ 方法 1 失败"
53
+ echo ""
54
+ fi
55
+
56
+ # 方法 2: 使用 socat(如果可用)
57
+ if command -v socat > /dev/null 2>&1; then
58
+ echo "方法 2: 尝试使用 socat (SOCKS5)..."
59
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
60
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
61
+ fi
62
+
63
+ cat >> "$SSH_CONFIG" << EOF
64
+
65
+ # Hugging Face SSH 配置(SOCKS5 via socat)
66
+ Host hf.co
67
+ HostName hf.co
68
+ User git
69
+ Port 443
70
+ IdentityFile $KEY_PATH
71
+ IdentitiesOnly yes
72
+ StrictHostKeyChecking accept-new
73
+ ConnectTimeout 15
74
+ ProxyCommand socat - SOCKS5:$WSL_HOST_IP:7897:%h:%p,socksport=7897
75
+ ServerAliveInterval 30
76
+ ServerAliveCountMax 3
77
+ TCPKeepAlive yes
78
+ EOF
79
+ chmod 600 "$SSH_CONFIG"
80
+
81
+ echo "测试连接..."
82
+ timeout 20 ssh -T [email protected] 2>&1 | head -10
83
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
84
+ echo ""
85
+ echo "✓ 方法 2 成功!使用 socat"
86
+ exit 0
87
+ fi
88
+ echo "✗ 方法 2 失败"
89
+ echo ""
90
+ fi
91
+
92
+ # 方法 3: 直接连接(依赖 TUN 模式自动代理)
93
+ echo "方法 3: 尝试直接连接(依赖 TUN 模式自动代理)..."
94
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
95
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
96
+ fi
97
+
98
+ cat >> "$SSH_CONFIG" << EOF
99
+
100
+ # Hugging Face SSH 配置(TUN 模式自动代理)
101
+ Host hf.co
102
+ HostName hf.co
103
+ User git
104
+ Port 443
105
+ IdentityFile $KEY_PATH
106
+ IdentitiesOnly yes
107
+ StrictHostKeyChecking accept-new
108
+ ConnectTimeout 15
109
+ ServerAliveInterval 30
110
+ ServerAliveCountMax 3
111
+ TCPKeepAlive yes
112
+ EOF
113
+ chmod 600 "$SSH_CONFIG"
114
+
115
+ echo "测试连接(TUN 模式)..."
116
+ timeout 20 ssh -T [email protected] 2>&1 | head -10
117
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
118
+ echo ""
119
+ echo "✓ 方法 3 成功!使用 TUN 模式自动代理"
120
+ exit 0
121
+ fi
122
+ echo "✗ 方法 3 失败"
123
+ echo ""
124
+
125
+ # 方法 4: 使用环境变量 + connect-proxy(HTTP)
126
+ echo "方法 4: 使用环境变量 + connect-proxy..."
127
+ if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
128
+ sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
129
+ fi
130
+
131
+ cat >> "$SSH_CONFIG" << EOF
132
+
133
+ # Hugging Face SSH 配置(HTTP 代理 + 环境变量)
134
+ Host hf.co
135
+ HostName hf.co
136
+ User git
137
+ Port 443
138
+ IdentityFile $KEY_PATH
139
+ IdentitiesOnly yes
140
+ StrictHostKeyChecking accept-new
141
+ ConnectTimeout 15
142
+ ProxyCommand connect-proxy -H $WSL_HOST_IP:7897 %h %p
143
+ ServerAliveInterval 30
144
+ ServerAliveCountMax 3
145
+ TCPKeepAlive yes
146
+ EOF
147
+ chmod 600 "$SSH_CONFIG"
148
+
149
+ export http_proxy=http://$WSL_HOST_IP:7897
150
+ export https_proxy=http://$WSL_HOST_IP:7897
151
+
152
+ echo "测试连接(带环境变量)..."
153
+ timeout 20 ssh -T [email protected] 2>&1 | head -10
154
+ if [ $? -eq 0 ] || [ $? -eq 1 ]; then
155
+ echo ""
156
+ echo "✓ 方法 4 成功!"
157
+ exit 0
158
+ fi
159
+ echo "✗ 方法 4 失败"
160
+ echo ""
161
+
162
+ echo "=== 所有方法都失败了 ==="
163
+ echo ""
164
+ echo "请检查:"
165
+ echo "1. SSH 公钥是否已添加到 Hugging Face"
166
+ echo "2. Clash Verge 的混合代理端口是否正确配置"
167
+ echo "3. 尝试在 Windows 上直接测试代理是否工作"
168
+