Spaces:
Sleeping
Sleeping
| echo "=== 配置 SSH 通过 Clash Verge 代理连接 ===" | |
| echo "" | |
| # 1. 检查 Clash 代理设置 | |
| echo "1. 检查代理配置..." | |
| echo "检查环境变量:" | |
| echo " http_proxy: ${http_proxy:-未设置}" | |
| echo " https_proxy: ${https_proxy:-未设置}" | |
| echo " all_proxy: ${all_proxy:-未设置}" | |
| echo "" | |
| # 2. 检测 Clash 代理地址(通常是 Windows 主机的 IP) | |
| echo "2. 检测 Clash 代理地址..." | |
| WSL_HOST_IP=$(ip route show | grep -i default | awk '{ print $3}' | head -1) | |
| echo "检测到的 WSL 网关 IP: $WSL_HOST_IP" | |
| # Clash 混合代理端口(同时支持 HTTP 和 SOCKS5) | |
| CLASH_MIXED_PORT=7897 | |
| echo "使用混合代理端口: $CLASH_MIXED_PORT" | |
| PROXY_HOST=$WSL_HOST_IP | |
| PROXY_PORT=$CLASH_MIXED_PORT | |
| # 测试端口是否可达 | |
| if timeout 2 bash -c "echo > /dev/tcp/$WSL_HOST_IP/$CLASH_MIXED_PORT" 2>/dev/null; then | |
| echo "✓ 混合代理端口 $CLASH_MIXED_PORT 可达" | |
| else | |
| echo "⚠️ 无法连接到端口 $CLASH_MIXED_PORT,请确认 Clash Verge 配置" | |
| read -p " 继续配置?(y/n): " continue_setup | |
| if [ "$continue_setup" != "y" ] && [ "$continue_setup" != "Y" ]; then | |
| exit 1 | |
| fi | |
| fi | |
| echo "" | |
| # 3. 检查 SSH key | |
| echo "3. 检查 SSH key..." | |
| if [ -f ~/.ssh/id_ed25519.pub ]; then | |
| echo "✓ 找到 SSH 公钥" | |
| KEY_PATH="$HOME/.ssh/id_ed25519" | |
| echo "公钥:" | |
| cat ~/.ssh/id_ed25519.pub | |
| echo "" | |
| echo "⚠️ 请确认此公钥已添加到:https://huggingface.co/settings/keys" | |
| read -p "公钥已添加?(y/n): " key_added | |
| if [ "$key_added" != "y" ] && [ "$key_added" != "Y" ]; then | |
| echo "请先添加公钥" | |
| exit 1 | |
| fi | |
| else | |
| echo "✗ 未找到 SSH key" | |
| exit 1 | |
| fi | |
| echo "" | |
| # 4. 配置 SSH config | |
| echo "4. 配置 SSH config..." | |
| SSH_CONFIG="$HOME/.ssh/config" | |
| # 备份 | |
| if [ -f "$SSH_CONFIG" ]; then | |
| cp "$SSH_CONFIG" "$SSH_CONFIG.backup.$(date +%Y%m%d_%H%M%S)" | |
| echo "✓ 已备份现有配置" | |
| fi | |
| # 删除旧的 hf.co 配置 | |
| if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then | |
| sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG" | |
| fi | |
| # 使用混合代理端口(支持 SOCKS5) | |
| # 优先使用 SOCKS5,因为 SSH 对 SOCKS5 支持更好 | |
| if command -v nc > /dev/null 2>&1; then | |
| cat >> "$SSH_CONFIG" << EOF | |
| # Hugging Face SSH 配置(通过混合代理端口 7897,使用 SOCKS5) | |
| Host hf.co | |
| HostName hf.co | |
| User git | |
| Port 443 | |
| IdentityFile $KEY_PATH | |
| IdentitiesOnly yes | |
| StrictHostKeyChecking accept-new | |
| ConnectTimeout 10 | |
| ProxyCommand nc -X 5 -x $PROXY_HOST:$PROXY_PORT %h %p | |
| ServerAliveInterval 60 | |
| ServerAliveCountMax 3 | |
| TCPKeepAlive yes | |
| LogLevel ERROR | |
| EOF | |
| echo "✓ 已配置使用 SOCKS5 通过混合代理端口 $PROXY_PORT" | |
| elif command -v connect-proxy > /dev/null 2>&1; then | |
| # 如果没有 nc,尝试使用 connect-proxy(HTTP 代理) | |
| cat >> "$SSH_CONFIG" << EOF | |
| # Hugging Face SSH 配置(通过混合代理端口 7897,使用 HTTP) | |
| Host hf.co | |
| HostName hf.co | |
| User git | |
| Port 443 | |
| IdentityFile $KEY_PATH | |
| IdentitiesOnly yes | |
| StrictHostKeyChecking accept-new | |
| ConnectTimeout 10 | |
| ProxyCommand connect-proxy -H $PROXY_HOST:$PROXY_PORT %h %p | |
| ServerAliveInterval 60 | |
| ServerAliveCountMax 3 | |
| TCPKeepAlive yes | |
| LogLevel ERROR | |
| EOF | |
| echo "✓ 已配置使用 HTTP 通过混合代理端口 $PROXY_PORT" | |
| else | |
| # 如果没有代理工具,依赖 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 10 | |
| ServerAliveInterval 60 | |
| ServerAliveCountMax 3 | |
| TCPKeepAlive yes | |
| LogLevel ERROR | |
| EOF | |
| echo "⚠️ 未找到 nc 或 connect-proxy,使用 TUN 模式自动代理" | |
| echo " 建议安装 netcat-openbsd: sudo apt-get install netcat-openbsd" | |
| fi | |
| chmod 600 "$SSH_CONFIG" | |
| echo "✓ SSH config 已配置" | |
| echo "" | |
| # 5. 设置 key 权限 | |
| chmod 600 "$KEY_PATH" | |
| chmod 644 "$KEY_PATH.pub" | |
| echo "✓ 文件权限已设置" | |
| echo "" | |
| # 6. 测试连接 | |
| echo "5. 测试 SSH 连接(10秒超时)..." | |
| echo "如果 TUN 模式正常工作,应该能自动通过代理连接" | |
| echo "" | |
| timeout 15 ssh -T -o ConnectTimeout=10 [email protected] 2>&1 | |
| SSH_EXIT=$? | |
| if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then | |
| echo "" | |
| echo "✓ SSH 连接成功!" | |
| echo "" | |
| echo "=== 配置完成 ===" | |
| echo "现在可以正常使用 git push 了" | |
| else | |
| echo "" | |
| echo "✗ SSH 连接失败" | |
| echo "" | |
| echo "可能的原因:" | |
| echo "1. Clash Verge TUN 模式未正确配置" | |
| echo "2. 需要手动设置代理环境变量" | |
| echo "" | |
| echo "尝试设置代理环境变量:" | |
| echo " export http_proxy=http://$PROXY_HOST:$PROXY_PORT" | |
| echo " export https_proxy=http://$PROXY_HOST:$PROXY_PORT" | |
| echo " export all_proxy=socks5://$PROXY_HOST:$PROXY_PORT" | |
| echo "" | |
| echo "或者检查 Clash Verge 的 TUN 模式设置" | |
| fi | |