#!/bin/bash echo "=== 修复 SSH 连接(最终方案)===" echo "" WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}') echo "Windows 主机 IP: $WSL_HOST_IP" 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)" fi # 删除旧的 hf.co 配置 if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG" fi # 方案:直接连接,完全依赖 TUN 模式自动代理 # 因为 TUN 模式应该自动代理所有流量,不需要显式配置代理 echo "配置 SSH(直接连接,依赖 TUN 模式自动代理)..." cat >> "$SSH_CONFIG" << EOF # Hugging Face SSH 配置(TUN 模式自动代理) 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 配置已完成(直接连接模式)" echo "" # 测试连接 echo "测试 SSH 连接..." echo "(TUN 模式应该自动代理所有流量,包括 SSH)" echo "" # 先测试网络连接 echo "1. 测试到 hf.co 的网络连接..." if timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then echo "✓ hf.co:443 可达(可能已通过 TUN 模式代理)" else echo "✗ hf.co:443 不可达" echo " 请检查 Clash Verge 的 TUN 模式是否正常工作" fi echo "" # 测试 SSH echo "2. 测试 SSH 连接..." SSH_OUTPUT=$(timeout 30 ssh -T git@hf.co 2>&1) SSH_EXIT=$? echo "$SSH_OUTPUT" echo "" # 检查结果 if echo "$SSH_OUTPUT" | grep -qi "successfully authenticated\|you've successfully authenticated\|welcome"; then echo "✓ SSH 连接成功!" echo "" echo "=== 配置完成 ===" echo "现在可以正常使用 git push 了" exit 0 elif [ $SSH_EXIT -eq 1 ] && ! echo "$SSH_OUTPUT" | grep -qi "timeout\|refused\|connection closed"; then # 退出码 1 但没超时/拒绝错误,可能是认证成功但命令失败(这是正常的) echo "✓ SSH 连接可能成功(退出码 1 但无超时错误)" echo "" echo "尝试推送测试:" echo " git push" exit 0 else echo "✗ SSH 连接失败" echo "" echo "错误分析:" if echo "$SSH_OUTPUT" | grep -qi "timeout"; then echo "- 连接超时" fi if echo "$SSH_OUTPUT" | grep -qi "connection refused"; then echo "- 连接被拒绝" fi if echo "$SSH_OUTPUT" | grep -qi "connection closed"; then echo "- 连接被关闭" fi echo "" echo "可能的原因:" echo "1. TUN 模式未正确代理 SSH 流量" echo "2. Clash Verge 的规则可能阻止了 SSH 连接" echo "3. 需要检查 Clash Verge 的日志" echo "" echo "建议:" echo "1. 检查 Clash Verge 的 TUN 模式是否启用" echo "2. 检查 Clash Verge 的规则,确保允许 hf.co 的连接" echo "3. 查看 Clash Verge 的日志,看是否有相关错误" fi