#!/bin/bash echo "=== 修复 Hugging Face SSH 连接问题 ===" echo "" # 1. 检查 SSH key 是否已添加到 Hugging Face echo "1. 检查 SSH key 配置..." if [ -f ~/.ssh/id_ed25519.pub ]; then echo "✓ 找到 SSH 公钥:" cat ~/.ssh/id_ed25519.pub echo "" echo "⚠️ 请确认此公钥已添加到:https://huggingface.co/settings/keys" echo " 如果未添加,请先添加后再继续" echo "" read -p "公钥已添加到 Hugging Face?(y/n): " key_added if [ "$key_added" != "y" ] && [ "$key_added" != "Y" ]; then echo "请先添加公钥到 Hugging Face,然后重新运行此脚本" exit 1 fi else echo "✗ 未找到 SSH 公钥" exit 1 fi echo "" # 2. 更新 SSH 配置,添加超时和连接选项 echo "2. 更新 SSH 配置..." SSH_CONFIG="$HOME/.ssh/config" # 备份 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 # 添加优化的配置 KEY_PATH="$HOME/.ssh/id_ed25519" cat >> "$SSH_CONFIG" << 'EOF' # Hugging Face SSH 配置(优化版) Host hf.co HostName hf.co User git Port 443 IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes StrictHostKeyChecking accept-new ConnectTimeout 10 ServerAliveInterval 60 ServerAliveCountMax 3 TCPKeepAlive yes LogLevel ERROR EOF chmod 600 "$SSH_CONFIG" echo "✓ SSH 配置已更新(带超时设置)" echo "" # 3. 测试网络连接 echo "3. 测试网络连接..." echo "测试 hf.co 的 443 端口..." if timeout 5 bash -c "echo > /dev/tcp/hf.co/443" 2>/dev/null; then echo "✓ 端口 443 可达" else echo "✗ 端口 443 不可达,可能被防火墙阻止" echo " 尝试使用代理或检查网络设置" fi echo "" # 4. 使用超时测试 SSH 连接 echo "4. 测试 SSH 连接(10秒超时)..." timeout 10 ssh -T -o ConnectTimeout=10 -o StrictHostKeyChecking=no git@hf.co 2>&1 SSH_EXIT=$? if [ $SSH_EXIT -eq 0 ] || [ $SSH_EXIT -eq 1 ]; then # 退出码 0 或 1 都可能是成功(1 通常表示认证成功但命令失败) echo "" echo "✓ SSH 连接测试完成" echo "" echo "=== 配置完成 ===" echo "现在可以尝试 git push" else echo "" echo "✗ SSH 连接失败或超时" echo "" echo "可能的解决方案:" echo "1. 检查网络连接和防火墙设置" echo "2. 如果使用代理,配置 SSH 代理:" echo " export http_proxy=http://proxy:port" echo " export https_proxy=http://proxy:port" echo "3. 尝试使用不同的网络环境" echo "4. 检查 Hugging Face 服务状态" fi