最近在使用 Git 时发现在使用 git clonegit pull 等需要访问远程仓库的操作时,总是无法连接 GitHub 服务器,很是郁闷。在查阅了多方资料后,总结了这一问题的解决方法,希望能解决这一问题。

问题再现

系统版本

macOS Big Sur 11.2.3

使用工具

Terminal

使用命令

$ git clone https://github.com/xxx/xxx.git
fatal: unable to access 'https://github.com/xxx/xxx.git/': LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

虚假的解决方案

经过查阅各方资料,发现这个问题并非一个少见的问题,有大量的 Git 用户(尤其是 macOS 用户)遇到了这个问题,还有一些用户在使用 Gem 等工具时也出现了同样的问题。

目前可以查到的解决方案包括以下几种:

重启计算机

众所周知,重启解决 90% 的问题,有时候重启电脑可以直接解决这一问题。

该方法对我无效。

修改 Git 网络配置
对于 Git 的网络设置,可以采用以下方式进行修改:

  • 删除 HTTP / HTTPS 代理设置:

    • 可以直接修改全局 Git 配置文件进行修改:
$ vim ~/.gitconfig

删除文件中 HTTP / HTTPS 的相关配置即可

  • 也可以使用命令进行修改:
$ git config --global --unset http.proxy
$ git config --global --unset https.proxy

该方法对我无效。

  • 更改 HTTP / HTTPS 加密库:

    由于该问题是 LibreSSL 库报错,可以修改 Git 使用 OpenSSL 库进行 HTTPS 的通信。

$ git config --global http.sslBackend "openssl"

该方法对我无效。

修改计算机网络配置

由于使用 IPv6 的原因,可能会导致这一问题的出现。可以配置计算机不使用 IPv6,故使用以下命令:

$ networksetup -setv6off Wi-Fi

如果有需要,可以再将配置修改回来:

$ networksetup -setv6automatic Wi-Fi

该方法好像对我有效

真正的解决方案

之前试了这么多网上的方法,其实都没有找到问题的症结,实在是汗颜。其实这个问题的根本原因在于国内网络环境对于境外服务器的种种限制,只用解决这一问题才能真正意义上解决 GitHub push/pull 网络错误的问题。根据使用的 GitHub 连接方式不同,针对 HTTPS 和 SSH 各有一种方法。

HTTPS 和 SSH 方法的对比

就一般的环境而言,这两种方法并没有什么区别;但是在配置了防火墙或代理的服务器环境中,SSH 方式可能会收到限制。

根据 GitHub 官方文档:

  • You can work with all repositories on GitHub over HTTPS, even if you are behind a firewall or proxy.
  • You can work with all repositories on GitHub over SSH, although firewalls and proxys might refuse to allow SSH connections.

幸运的是,在仅有防火墙端口限制的情况下,现在可以通过 HTTPS 的端口使用 SSH 方式连接 GitHub 服务器,具体方式请参阅 Using SSH over the HTTPS port。

使用 HTTPS 代理

在使用 HTTPS 连接 GitHub 进行 push/pull 时(即 origin 地址为 https://github.com/xxx/xxx.git),需要更改本地 git 的配置,使用代理向 GitHub 发起请求。

要求:你需要有一个梯子,关于如何获取梯子,可以参考我的收藏中关于 VPN 的章节。

执行如下命令:

$ git config --global -e

这将进入 git 的配置文件编辑界面(将使用 git 指定的默认编辑器打开)。

在该文件中加入如下内容:

[http]proxy = socks5://127.0.0.1:7891
[https]proxy = socks5://127.0.0.1:7891

其中“7891”为你的代理软件的指定出入端口,请根据实际情况自行修改。

该方法对我有效

使用 SSH

众所周知在 clone GitHub 仓库时可以使用 HTTPS 或者 SSH 进行 clone,而 SSH 却没有 HTTPS 的网络连接问题,所以可以将 push/pull 的连接方式由 HTTPS 改为 SSH。

要求:你需要提前生成 SSH 公私钥对,并将公钥添加到你的 GitHub 账户中。关于这一部分的详细信息,请参阅 Connecting to GitHub with SSH。

进入仓库对应目录,执行如下命令:

$ git remote set-url origin git@github.com:xxx/xxx.git

更改完成后,可以使用如下命令查看当前的 origin 地址:

$ git remote -v

该方法对我有效。强烈建议使用该方法,简单有效。

结论

所以说,有的时候网上的解决方案并不一定能解决自己的问题,还需要进行深入的研究和发掘。

参考

  • SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
  • Switching remote URLs from HTTPS to SSH

Git - SSL_ERROR_SYSCALL 问题解决相关推荐

  1. git常见问题解决方法总结

    git常见问题解决方法总结 fatal: Could not read from remote repository 大概意思是:不能从远程存储库读取. 一般我们在使用git push -u orig ...

  2. git常见问题解决办法

    1,git status乱码 git config --global core.quotepath false 执行完后再使用时,就显示正常了

  3. git remote add origin xxx.git 的问题解决

    在输入git remote add origin xxx.git 后,系统提示远程origin已经存在.可以采用以下方式进行解决: 输入命令: git remote rm origin git rem ...

  4. 【人见人爱报错系列】Git常见问题解决大全

    前言 在使用的github\gitlab各种hub的过程中,会遇到各种各样的小问题,这些会给程序员们带来五光十色的烦恼,本文总结使用git的各种问题并持续更新. 一.Git用户名邮箱设置 使用git过 ...

  5. 【IOS】Firebase(Google、Facebook、Apple、Guest)登录,FCM,Apple In-App,Kakao

    写在开头 记录自己接入SDK的过程.请各位指正. 最好提前做的工作 工欲善其事,必先利其器. 1.Mac电脑因Xcode而内存越来越大 弄到一半突然提示我内存不足,而且xcode还越来越卡.也是醉了. ...

  6. vscode与git分支_Visual Studio Code 使用Git进行版本控制

    VS Code 集成了Git功能,并支持基本的git命令,这使得我们能够在开发过程方便的提交和获取代码. 1.1 初始化 首先我们创建一个名为gittest的文件夹,当然它不在git的版本控制管理中. ...

  7. Visual Studio Code 使用Git进行版本控制

    Visual Studio Code 使用Git进行版本控制 本来认为此类教程,肯定是满网飞了.今天首次使用VS Code的Git功能,翻遍了 所有中文教程,竟没有一个靠谱的.遂动笔写一篇. 请确保你 ...

  8. 三种方法解决git拒绝连接问题fatal: unable to access xxxx: Failed to connect to xxxx : Connection refused

    git clone 拒绝连接,Connection refused 解决方法 一.使用env指令查询系统代理并取消对应http代理 二.使用git config指令查询代理并取消代理 三.直接修改.g ...

  9. Changes to be committed: (use “git restore --staged <file>...“ to unstage)

    Changes to be committed: (use "git restore --staged -" to unstage) deleted: sql/tp_music.s ...

最新文章

  1. 激光SLAM学习--数据处理和特征提取
  2. PowerPoint Storyboarding:Visual Studio 2012 RC带给开发者的秘密杀器
  3. Hybris Commerce里和Tomcat相关的一些配置信息
  4. 【ios】在真实设备上运行
  5. 使用Acronis Disk Director Suite调整分区大小
  6. python模块之logging
  7. AD的备份与标准还原:深入浅出Active Directory系列(四)
  8. jq select 操作
  9. 【人脸识别】基于matlab GUI形态学教室人数统计(带面板)【含Matlab源码 1703期】
  10. 快速突破面试算法之二分查找篇
  11. vue 文字转语音mp3_vue项目或网页上实现文字转换成语音播放功能
  12. 【系统分析师之路】2020年下系统分析师论文写作真题
  13. bootstrap菜单html,Bootstrap实现下拉菜单效果
  14. Amazon软件开发工程师面试题
  15. 计算机网络怎么连接两台机器,两台电脑怎么连接局域网,小编教你两台电脑怎么连接局域网...
  16. BZOJ 4567: [Scoi2016]背单词
  17. 私域运营第五讲:实体店私域流量拉新实体餐饮店如何通过搭建私域流量实现营收增长
  18. vmware exis如何设置双网卡
  19. windows的注册表有什么用?
  20. MessageBox in wpf

热门文章

  1. android编译错误
  2. 【Matlab学习手记】bsxfun的使用
  3. Python的电子邮件操作
  4. 什么是区块链的共识机制?
  5. C#宿舍管理系统(C#课程设计含源码)
  6. TCP为什么需要3次握手与4次挥手
  7. Linux服务器百万并发实现与问题排查
  8. 处理textarea的空格和换行
  9. 随机事件及其概率运算
  10. SMARTS 动态问卷