File size: 2,932 Bytes
386b079
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/bin/bash

echo "=== 移除代理配置,使用 TUN 模式自动代理 ==="
echo ""

SSH_CONFIG="$HOME/.ssh/config"
KEY_PATH="$HOME/.ssh/id_ed25519"

# 备份配置
if [ -f "$SSH_CONFIG" ]; then
    cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)"
    echo "✓ 已备份现有配置"
fi

# 删除旧的 hf.co 配置
if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
    sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
    echo "✓ 已删除旧的 hf.co 配置"
fi

# 添加新配置(不使用任何代理)
echo "配置 SSH(直接连接,完全依赖 TUN 模式)..."
cat >> "$SSH_CONFIG" << EOF

# Hugging Face SSH 配置(TUN 模式自动代理,不使用 ProxyCommand)
Host hf.co
    HostName hf.co
    User git
    Port 443
    IdentityFile $KEY_PATH
    IdentitiesOnly yes
    StrictHostKeyChecking accept-new
    ConnectTimeout 30
    ServerAliveInterval 20
    ServerAliveCountMax 5
    TCPKeepAlive yes
    LogLevel INFO
EOF

chmod 600 "$SSH_CONFIG"
chmod 600 "$KEY_PATH"
chmod 644 "$KEY_PATH.pub"

echo "✓ SSH 配置已完成(无 ProxyCommand)"
echo ""

# 验证配置
echo "当前 SSH 配置:"
grep -A 15 "Host hf.co" "$SSH_CONFIG"
echo ""

# 确认没有 ProxyCommand
if grep -q "ProxyCommand" "$SSH_CONFIG" 2>/dev/null; then
    echo "⚠️  警告:配置中仍有 ProxyCommand,这不应该存在"
    grep "ProxyCommand" "$SSH_CONFIG"
else
    echo "✓ 确认:配置中没有 ProxyCommand"
fi
echo ""

# 测试连接
echo "测试 SSH 连接(直接连接,依赖 TUN 模式)..."
echo "(这可能需要 10-20 秒)"
echo ""

timeout 30 ssh -T -v [email protected] 2>&1 | tee /tmp/ssh_test_no_proxy.log
SSH_EXIT=${PIPESTATUS[0]}

echo ""
echo "---"

# 分析结果
if grep -qi "successfully authenticated\|you've successfully authenticated\|welcome" /tmp/ssh_test_no_proxy.log; then
    echo "✓ SSH 连接成功!"
    echo ""
    echo "=== 配置完成 ==="
    echo "现在可以正常使用 git push 了"
    exit 0
elif [ $SSH_EXIT -eq 1 ] && ! grep -qi "timeout\|refused\|connection closed" /tmp/ssh_test_no_proxy.log; then
    echo "✓ SSH 连接可能成功(退出码 1 但无超时错误,这是正常的)"
    echo ""
    echo "可以尝试推送:"
    echo "  git push"
    exit 0
else
    echo "✗ SSH 连接仍然失败"
    echo ""
    echo "查看详细错误:"
    grep -E "(timeout|refused|closed|error|failed|banner)" /tmp/ssh_test_no_proxy.log | head -10
    echo ""
    echo "可能的原因:"
    echo "1. TUN 模式可能没有正确代理 SSH 流量"
    echo "2. Clash Verge 的规则可能阻止了 SSH 连接"
    echo "3. 需要检查 Clash Verge 的 TUN 模式配置"
    echo ""
    echo "建议:"
    echo "1. 在 Clash Verge 中检查 TUN 模式是否完全启用"
    echo "2. 查看 Clash Verge 的日志,看是否有 hf.co 的连接记录"
    echo "3. 尝试在 Clash Verge 中临时设置为全局代理模式测试"
fi