Spaces:
Running
Running
File size: 3,477 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
#!/bin/bash
echo "=== 修复 TUN 模式下的 SSH 连接 ==="
echo ""
WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
echo "Windows 主机 IP: $WSL_HOST_IP"
echo "混合代理端口: 7897"
echo ""
# 1. 检查 Clash Verge 的局域网连接设置
echo "1. 重要提示:"
echo " 请检查 Clash Verge 设置中的 '局域网连接' 选项"
echo " 如果未启用,WSL 无法访问代理端口"
echo " 路径:设置 -> Clash 设置 -> 局域网连接"
echo ""
read -p "局域网连接已启用?(y/n): " lan_enabled
if [ "$lan_enabled" != "y" ] && [ "$lan_enabled" != "Y" ]; then
echo ""
echo "⚠️ 请先启用 '局域网连接',然后重新运行此脚本"
exit 1
fi
echo ""
# 2. 测试端口连接
echo "2. 测试端口连接..."
if timeout 3 bash -c "echo > /dev/tcp/$WSL_HOST_IP/7897" 2>/dev/null; then
echo "✓ 端口 7897 可达"
else
echo "✗ 端口 7897 不可达"
echo ""
echo "可能的原因:"
echo "1. Clash Verge 的 '局域网连接' 未启用"
echo "2. Windows 防火墙阻止了端口"
echo "3. Clash Verge 未运行"
echo ""
echo "请检查后重试"
exit 1
fi
echo ""
# 3. 测试代理功能
echo "3. 测试代理功能..."
export http_proxy=http://$WSL_HOST_IP:7897
export https_proxy=http://$WSL_HOST_IP:7897
echo "测试 HTTP 代理..."
if timeout 5 curl -s --proxy "$http_proxy" https://www.google.com > /dev/null 2>&1; then
echo "✓ HTTP 代理工作正常"
HTTP_WORKS=true
else
echo "✗ HTTP 代理测试失败"
HTTP_WORKS=false
fi
echo ""
# 4. 配置 SSH(使用 connect-proxy)
echo "4. 配置 SSH..."
SSH_CONFIG="$HOME/.ssh/config"
KEY_PATH="$HOME/.ssh/id_ed25519"
# 确保 connect-proxy 已安装
if ! command -v connect-proxy > /dev/null 2>&1; then
echo "安装 connect-proxy..."
sudo apt-get update -qq
sudo apt-get install -y connect-proxy
fi
# 备份
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
# 添加配置
cat >> "$SSH_CONFIG" << EOF
# Hugging Face SSH 配置(通过混合代理端口 7897)
Host hf.co
HostName hf.co
User git
Port 443
IdentityFile $KEY_PATH
IdentitiesOnly yes
StrictHostKeyChecking accept-new
ConnectTimeout 15
ProxyCommand connect-proxy -H $WSL_HOST_IP:7897 %h %p
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
LogLevel ERROR
EOF
chmod 600 "$SSH_CONFIG"
chmod 600 "$KEY_PATH"
chmod 644 "$KEY_PATH.pub"
echo "✓ SSH 配置已完成"
echo ""
# 5. 测试 SSH 连接
echo "5. 测试 SSH 连接..."
echo "(这可能需要几秒钟)"
timeout 20 ssh -T -v [email protected] 2>&1 | tee /tmp/ssh_test.log
SSH_EXIT=${PIPESTATUS[0]}
echo ""
if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then
echo "✓ SSH 连接成功!"
echo ""
echo "=== 配置完成 ==="
echo "现在可以正常使用 git push 了"
else
echo "✗ SSH 连接失败"
echo ""
echo "查看详细日志:"
grep -E "(Connecting|Authenticated|successfully|Connection|timeout|error|failed)" /tmp/ssh_test.log | head -10
echo ""
echo "如果仍然失败,请检查:"
echo "1. Clash Verge 的 '局域网连接' 是否已启用并保存"
echo "2. Windows 防火墙是否允许端口 7897"
echo "3. 尝试重启 Clash Verge"
fi
|