Spaces:
Running
Running
| echo "=== 最终修复方案 ===" | |
| echo "" | |
| WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}') | |
| echo "Windows 主机 IP: $WSL_HOST_IP" | |
| echo "" | |
| # 先测试 SOCKS5 是否工作 | |
| echo "1. 测试 SOCKS5 代理功能..." | |
| if command -v curl > /dev/null 2>&1; then | |
| if timeout 5 curl -s --socks5-hostname $WSL_HOST_IP:7897 https://www.google.com > /dev/null 2>&1; then | |
| echo "✓ SOCKS5 代理工作正常,使用 SOCKS5 方式" | |
| USE_SOCKS5=true | |
| else | |
| echo "✗ SOCKS5 代理测试失败,尝试其他方式" | |
| USE_SOCKS5=false | |
| fi | |
| else | |
| echo "⚠️ curl 未安装,假设 SOCKS5 可用" | |
| USE_SOCKS5=true | |
| fi | |
| echo "" | |
| # 安装必要的工具 | |
| echo "2. 检查并安装必要工具..." | |
| if ! command -v nc > /dev/null 2>&1; then | |
| echo "安装 netcat-openbsd..." | |
| sudo apt-get update -qq | |
| sudo apt-get install -y netcat-openbsd | |
| fi | |
| # 检查 nc 是否支持 SOCKS | |
| if nc -h 2>&1 | grep -q "\-X"; then | |
| NC_SUPPORTS_SOCKS=true | |
| else | |
| NC_SUPPORTS_SOCKS=false | |
| echo "⚠️ nc 不支持 SOCKS,尝试安装 netcat-openbsd..." | |
| sudo apt-get install -y netcat-openbsd | |
| if nc -h 2>&1 | grep -q "\-X"; then | |
| NC_SUPPORTS_SOCKS=true | |
| fi | |
| fi | |
| echo "" | |
| # 配置 SSH | |
| 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 | |
| # 根据测试结果选择配置方式 | |
| if [ "$USE_SOCKS5" = "true" ] && [ "$NC_SUPPORTS_SOCKS" = "true" ]; then | |
| echo "3. 配置 SSH(使用 SOCKS5 via nc)..." | |
| cat >> "$SSH_CONFIG" << EOF | |
| # Hugging Face SSH 配置(SOCKS5) | |
| Host hf.co | |
| HostName hf.co | |
| User git | |
| Port 443 | |
| IdentityFile $KEY_PATH | |
| IdentitiesOnly yes | |
| StrictHostKeyChecking accept-new | |
| ConnectTimeout 20 | |
| ProxyCommand nc -X 5 -x $WSL_HOST_IP:7897 %h %p | |
| ServerAliveInterval 30 | |
| ServerAliveCountMax 3 | |
| TCPKeepAlive yes | |
| LogLevel ERROR | |
| EOF | |
| elif command -v connect-proxy > /dev/null 2>&1; then | |
| echo "3. 配置 SSH(使用 HTTP via connect-proxy)..." | |
| cat >> "$SSH_CONFIG" << EOF | |
| # Hugging Face SSH 配置(HTTP 代理) | |
| Host hf.co | |
| HostName hf.co | |
| User git | |
| Port 443 | |
| IdentityFile $KEY_PATH | |
| IdentitiesOnly yes | |
| StrictHostKeyChecking accept-new | |
| ConnectTimeout 20 | |
| ProxyCommand connect-proxy -H $WSL_HOST_IP:7897 %h %p | |
| ServerAliveInterval 30 | |
| ServerAliveCountMax 3 | |
| TCPKeepAlive yes | |
| LogLevel ERROR | |
| EOF | |
| else | |
| echo "3. 配置 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 20 | |
| ServerAliveInterval 30 | |
| ServerAliveCountMax 3 | |
| TCPKeepAlive yes | |
| LogLevel ERROR | |
| EOF | |
| fi | |
| chmod 600 "$SSH_CONFIG" | |
| chmod 600 "$KEY_PATH" | |
| chmod 644 "$KEY_PATH.pub" | |
| echo "✓ SSH 配置已完成" | |
| echo "" | |
| # 测试连接 | |
| echo "4. 测试 SSH 连接..." | |
| echo "(这可能需要 10-20 秒)" | |
| echo "" | |
| timeout 25 ssh -T [email protected] 2>&1 | |
| SSH_EXIT=$? | |
| echo "" | |
| if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then | |
| echo "✓ SSH 连接成功!" | |
| echo "" | |
| echo "=== 配置完成 ===" | |
| echo "现在可以正常使用 git push 了" | |
| echo "" | |
| echo "注意:如果 Windows 防火墙关闭后可以连接," | |
| echo "建议配置防火墙规则允许端口 7897,而不是完全关闭防火墙" | |
| else | |
| echo "✗ SSH 连接仍然失败" | |
| echo "" | |
| echo "请运行详细测试:" | |
| echo " ./test_socks5.sh" | |
| echo " ./try_different_methods.sh" | |
| fi | |