aileeao / fix_ssh_final.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 ""
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
# 删除旧的 hf.co 配置
if grep -q "Host hf.co" "$SSH_CONFIG" 2>/dev/null; then
sed -i '/^Host hf.co$/,/^$/d' "$SSH_CONFIG"
fi
# 方案:直接连接,完全依赖 TUN 模式自动代理
# 因为 TUN 模式应该自动代理所有流量,不需要显式配置代理
echo "配置 SSH(直接连接,依赖 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 30
ServerAliveInterval 20
ServerAliveCountMax 5
TCPKeepAlive yes
LogLevel INFO
EOF
chmod 600 "$SSH_CONFIG"
chmod 600 "$KEY_PATH"
chmod 644 "$KEY_PATH.pub"
echo "✓ SSH 配置已完成(直接连接模式)"
echo ""
# 测试连接
echo "测试 SSH 连接..."
echo "(TUN 模式应该自动代理所有流量,包括 SSH)"
echo ""
# 先测试网络连接
echo "1. 测试到 hf.co 的网络连接..."
if timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then
echo "✓ hf.co:443 可达(可能已通过 TUN 模式代理)"
else
echo "✗ hf.co:443 不可达"
echo " 请检查 Clash Verge 的 TUN 模式是否正常工作"
fi
echo ""
# 测试 SSH
echo "2. 测试 SSH 连接..."
SSH_OUTPUT=$(timeout 30 ssh -T [email protected] 2>&1)
SSH_EXIT=$?
echo "$SSH_OUTPUT"
echo ""
# 检查结果
if echo "$SSH_OUTPUT" | grep -qi "successfully authenticated\|you've successfully authenticated\|welcome"; then
echo "✓ SSH 连接成功!"
echo ""
echo "=== 配置完成 ==="
echo "现在可以正常使用 git push 了"
exit 0
elif [ $SSH_EXIT -eq 1 ] && ! echo "$SSH_OUTPUT" | grep -qi "timeout\|refused\|connection closed"; then
# 退出码 1 但没超时/拒绝错误,可能是认证成功但命令失败(这是正常的)
echo "✓ SSH 连接可能成功(退出码 1 但无超时错误)"
echo ""
echo "尝试推送测试:"
echo " git push"
exit 0
else
echo "✗ SSH 连接失败"
echo ""
echo "错误分析:"
if echo "$SSH_OUTPUT" | grep -qi "timeout"; then
echo "- 连接超时"
fi
if echo "$SSH_OUTPUT" | grep -qi "connection refused"; then
echo "- 连接被拒绝"
fi
if echo "$SSH_OUTPUT" | grep -qi "connection closed"; then
echo "- 连接被关闭"
fi
echo ""
echo "可能的原因:"
echo "1. TUN 模式未正确代理 SSH 流量"
echo "2. Clash Verge 的规则可能阻止了 SSH 连接"
echo "3. 需要检查 Clash Verge 的日志"
echo ""
echo "建议:"
echo "1. 检查 Clash Verge 的 TUN 模式是否启用"
echo "2. 检查 Clash Verge 的规则,确保允许 hf.co 的连接"
echo "3. 查看 Clash Verge 的日志,看是否有相关错误"
fi