Git SSH连接异常求助:原可用现间歇性失败且无法推送
排查与解决Git SSH连接及密钥添加问题
听起来你这问题确实挺折腾的——间歇性的SSH连接失败,还有网页添加密钥卡住,偏偏只有你遇到这种情况,肯定让人摸不着头脑。我来给你一步步梳理排查方向和解决办法:
一、先搞定Git SSH间歇性连接失败的问题
Git的错误提示太笼统,咱们先绕开Git,直接测试SSH本身的连通性,这样能精准定位问题:
第一步:用verbose模式测试SSH连接
打开终端,运行这个命令(把123.45.67.89换成实验室Git服务器的IP,xy换成对应的SSH端口,如果是默认22可以省略):ssh -v -p xy git@123.45.67.89这个命令会输出SSH连接的详细日志,你可以重点看这几个地方:
- 有没有加载到你的SSH密钥(会显示
Offering public key: ...) - 连接过程中是在哪个环节断开的(比如
Connection closed by remote host之前的步骤)
如果日志里显示没找到你的密钥,那就是密钥加载的问题;如果是连接到一半断了,大概率是VPN的网络稳定性问题。
- 有没有加载到你的SSH密钥(会显示
第二步:确认SSH密钥的状态和权限
很多时候密钥加载失败是因为权限不对,SSH对密钥文件的权限要求很严格:- 先检查密钥有没有被SSH agent加载:运行
ssh-add -l,如果看不到你的密钥指纹,说明没加载成功,重新运行ssh-add ~/.ssh/你的密钥文件名(比如ssh-add ~/.ssh/id_rsa)。 - 检查密钥文件的权限:
密钥文件必须是chmod 600 ~/.ssh/你的密钥文件名 chmod 644 ~/.ssh/你的密钥文件名.pub600(只有自己能读写),公钥是644,不然SSH会自动忽略这个密钥。
- 先检查密钥有没有被SSH agent加载:运行
第三步:配置SSH保持连接,避免VPN超时
新的VPN客户端可能会自动断开长时间闲置的连接,咱们给SSH加个心跳包配置:
在~/.ssh/config文件里(如果没有就新建一个)添加以下内容:Host lab-git-server HostName 123.45.67.89 Port xy User git IdentityFile ~/.ssh/你的密钥文件名 ServerAliveInterval 30 ServerAliveCountMax 3之后你可以用
ssh lab-git-server或者把Git远程地址改成lab-git-server:仓库路径.git,这样SSH会每隔30秒发一个心跳包,防止VPN把连接断掉。第四步:排查VPN的网络稳定性
既然只有你遇到问题,可能是你的VPN客户端配置有问题:- 用
ping 123.45.67.89持续测试5分钟,看看有没有丢包;如果丢包严重,说明VPN连接不稳定,试试重启VPN客户端或者换个VPN节点(如果有的话)。 - 检查VPN有没有限制SSH端口:有些VPN会屏蔽非标准端口,确认实验室Git服务器的SSH端口是开放的。
- 用
二、解决网页添加SSH密钥提交后加载不动的问题
这个问题大概率是浏览器或本地网络的小问题,试试这些办法:
- 先清理浏览器的缓存和Cookie,或者用隐私模式打开Git服务器页面,再尝试添加密钥。很多时候是缓存导致的页面交互异常。
- 打开浏览器的开发者工具(按F12),切换到「Network」标签,然后点击提交按钮,看看请求有没有发出去,有没有报错(比如500错误、超时)。如果是请求超时,可能是你的网络到Git服务器的某个端口不通(比如网页的提交接口端口)。
- 换个浏览器试试(比如Chrome换成Firefox),或者用学校的公共电脑登录你的账号添加密钥,排除是你本地浏览器的问题。
最后总结
先从SSH的verbose日志入手,定位是密钥问题还是网络问题,这是最有效的办法。如果日志显示密钥正常加载但连接断开,就重点排查VPN的稳定性;如果密钥没被加载,就调整权限和SSH agent的配置。网页的问题先从浏览器缓存和网络请求排查,应该能很快解决。
内容的提问来源于stack exchange,提问作者ItsMeTheBee




