Spaces:
Running
Running
| 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 | |