aileeao / try_different_methods.sh
aihuashanying's picture
修复不能push的问题
386b079
#!/bin/bash
echo "=== 尝试不同的 SSH 连接方法 ==="
echo ""
WSL_HOST_IP=$(ip route show | grep default | awk '{print $3}')
echo "Windows 主机 IP: $WSL_HOST_IP"
echo "混合代理端口: 7897"
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
# 方法 1: 尝试 SOCKS5(混合端口通常也支持 SOCKS5)
echo "方法 1: 尝试使用 SOCKS5 通过混合端口..."
if command -v nc > /dev/null 2>&1; then
# 删除旧的 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 配置(SOCKS5 via nc)
Host hf.co
HostName hf.co
User git
Port 443
IdentityFile $KEY_PATH
IdentitiesOnly yes
StrictHostKeyChecking accept-new
ConnectTimeout 15
ProxyCommand nc -X 5 -x $WSL_HOST_IP:7897 %h %p
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
EOF
chmod 600 "$SSH_CONFIG"
echo "测试连接..."
timeout 20 ssh -T [email protected] 2>&1 | head -10
if [ $? -eq 0 ] || [ $? -eq 1 ]; then
echo ""
echo "✓ 方法 1 成功!使用 SOCKS5"
exit 0
fi
echo "✗ 方法 1 失败"
echo ""
fi
# 方法 2: 使用 socat(如果可用)
if command -v socat > /dev/null 2>&1; then
echo "方法 2: 尝试使用 socat (SOCKS5)..."
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 配置(SOCKS5 via socat)
Host hf.co
HostName hf.co
User git
Port 443
IdentityFile $KEY_PATH
IdentitiesOnly yes
StrictHostKeyChecking accept-new
ConnectTimeout 15
ProxyCommand socat - SOCKS5:$WSL_HOST_IP:7897:%h:%p,socksport=7897
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
EOF
chmod 600 "$SSH_CONFIG"
echo "测试连接..."
timeout 20 ssh -T [email protected] 2>&1 | head -10
if [ $? -eq 0 ] || [ $? -eq 1 ]; then
echo ""
echo "✓ 方法 2 成功!使用 socat"
exit 0
fi
echo "✗ 方法 2 失败"
echo ""
fi
# 方法 3: 直接连接(依赖 TUN 模式自动代理)
echo "方法 3: 尝试直接连接(依赖 TUN 模式自动代理)..."
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 配置(TUN 模式自动代理)
Host hf.co
HostName hf.co
User git
Port 443
IdentityFile $KEY_PATH
IdentitiesOnly yes
StrictHostKeyChecking accept-new
ConnectTimeout 15
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
EOF
chmod 600 "$SSH_CONFIG"
echo "测试连接(TUN 模式)..."
timeout 20 ssh -T [email protected] 2>&1 | head -10
if [ $? -eq 0 ] || [ $? -eq 1 ]; then
echo ""
echo "✓ 方法 3 成功!使用 TUN 模式自动代理"
exit 0
fi
echo "✗ 方法 3 失败"
echo ""
# 方法 4: 使用环境变量 + connect-proxy(HTTP)
echo "方法 4: 使用环境变量 + connect-proxy..."
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 配置(HTTP 代理 + 环境变量)
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
EOF
chmod 600 "$SSH_CONFIG"
export http_proxy=http://$WSL_HOST_IP:7897
export https_proxy=http://$WSL_HOST_IP:7897
echo "测试连接(带环境变量)..."
timeout 20 ssh -T [email protected] 2>&1 | head -10
if [ $? -eq 0 ] || [ $? -eq 1 ]; then
echo ""
echo "✓ 方法 4 成功!"
exit 0
fi
echo "✗ 方法 4 失败"
echo ""
echo "=== 所有方法都失败了 ==="
echo ""
echo "请检查:"
echo "1. SSH 公钥是否已添加到 Hugging Face"
echo "2. Clash Verge 的混合代理端口是否正确配置"
echo "3. 尝试在 Windows 上直接测试代理是否工作"