Spaces:
Running
Running
| 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 上直接测试代理是否工作" | |