You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git通过SSH推送时无限挂起,寻求长期解决方案

Git SSH推送无限挂起的长期解决方案

我在向Git仓库推送代码时遇到无限挂起的问题,确认是SSH层面的问题——切换为HTTPS远程地址后推送正常,但我更习惯用SSH访问。目前重启SSH代理能临时解决单次推送:

launchctl stop /System/Library/LaunchAgents/org.openbsd.ssh-agent
launchctl start /System/Library/LaunchAgents/org.openbsd.ssh-agent

但需要更稳定的长期解决办法,以下是可行方案:

1. 配置SSH连接复用

在~/.ssh/config文件中添加连接复用配置,让SSH复用已建立的连接,避免每次推送重新握手时出现异常:

Host *
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h-%p
  ControlPersist 600s

创建对应的sockets目录并设置权限:

mkdir -p ~/.ssh/sockets
chmod 700 ~/.ssh/sockets

2. 调整SSH超时参数

在~/.ssh/config中添加存活检测配置,防止连接因长时间无响应挂起:

Host *
  ServerAliveInterval 30
  ServerAliveCountMax 3
  • ServerAliveInterval:每30秒向Git服务器发送一次存活信号
  • ServerAliveCountMax:连续3次未收到响应则主动断开连接,避免无限挂起

3. 修复SSH密钥及配置文件权限

权限过宽会导致SSH拒绝使用密钥,执行以下命令修正:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa  # 若使用ed25519密钥则替换为id_ed25519
chmod 644 ~/.ssh/authorized_keys ~/.ssh/config

4. 替换系统SSH代理为自定义代理

系统自带的ssh-agent可能存在稳定性问题,可禁用它并在shell启动时手动加载:
首先禁用系统代理:

launchctl unload -w /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

然后在~/.zshrc(或~/.bash_profile,取决于你用的shell)中添加:

if [ -z "$SSH_AUTH_SOCK" ]; then
  eval "$(ssh-agent -s)"
  ssh-add ~/.ssh/id_rsa  # 替换为你的密钥路径
fi

每次打开终端会自动启动代理并加载密钥,避免系统代理的异常。

5. 指定Git使用系统SSH程序

部分Git版本会使用内置SSH而非系统SSH,导致兼容性问题,可强制指定系统SSH路径:

git config --global core.sshCommand "/usr/bin/ssh"

内容的提问来源于stack exchange,提问作者Tydal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:05:18