aileeao / final_fix.sh
aihuashanying's picture
修复不能push的问题
386b079
#!/bin/bash
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