Spaces:
Running
Running
Commit
·
386b079
1
Parent(s):
34f70c9
修复不能push的问题
Browse files- GIT_PUSH_FIX.md +152 -0
- check_clash_rules.sh +31 -0
- check_clash_tun_ssh.sh +54 -0
- check_git_config.sh +59 -0
- check_profiles_config.sh +47 -0
- check_proxy.sh +89 -0
- check_windows_firewall.md +34 -0
- clash_config_guide.md +146 -0
- clash_verge_rules_guide.md +141 -0
- create_clash_rule_patch.sh +43 -0
- diagnose_and_fix.sh +240 -0
- edit_correct_config.md +103 -0
- final_fix.sh +151 -0
- find_active_config.sh +47 -0
- find_and_edit_clash_config.sh +70 -0
- fix_git_push.sh +69 -0
- fix_git_remote.sh +55 -0
- fix_ssh_banner_timeout.sh +148 -0
- fix_ssh_connection.sh +98 -0
- fix_ssh_final.sh +111 -0
- fix_tun_mode.sh +129 -0
- fix_use_port_22.sh +74 -0
- install_proxy_tools.sh +46 -0
- quick_add_rules.sh +53 -0
- quick_setup_7897.sh +115 -0
- quick_test.sh +26 -0
- remove_proxy_and_test.sh +101 -0
- setup_ssh.sh +132 -0
- setup_ssh_with_proxy.sh +175 -0
- simple_ssh_config.sh +77 -0
- test_port_22.sh +30 -0
- test_port_connection.sh +55 -0
- test_socks5.sh +67 -0
- test_ssh.sh +24 -0
- test_ssh_detailed.sh +76 -0
- test_ssh_proxy.sh +39 -0
- test_tun_mode.sh +49 -0
- try_different_methods.sh +168 -0
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 |
+
ssh -T [email protected]
|
| 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 |
+
ssh -T [email protected]
|
| 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 |
+
ssh -T [email protected]
|
| 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 |
+
|