Spaces:
Running
Running
File size: 4,341 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 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
#!/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 上直接测试代理是否工作"
|