Spaces:
Running
Running
File size: 5,037 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 170 171 172 173 174 175 176 |
#!/bin/bash
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
|