Git - SSL_ERROR_SYSCALL 问题解决

最近在使用 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

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

结论

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

参考

OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054是一个与网络连接相关的错误。这个错误通常出现在使用Git进行提交或克隆操作时。可以根据以下几种方法来解决这个问题: 1. 检查网络连接:首先,确保你的网络连接正常并且稳定。这个错误通常是由于网络过慢或不稳定导致的。可以尝试使用不同的网络连接,者连接到更稳定的网络上再次尝试操作。 2. 更换网络环境:如果你使用的是公共Wi-Fi或者公司的网络,有时候这些网络对Git操作进行了限制。尝试切换到一个不同的网络环境,例如使用个人热点或者使用家庭网络来进行操作。 3. 使用代理:如果你在使用Git时遇到了网络问题,可以尝试配置代理。可以使用`git config`命令来设置代理,具体的设置方法可以参考Git的官方文档。 4. 手动下载:如果以上方法都没有解决问题,你可以尝试手动下载所需的文件。在Git操作中遇到网络问题时,你可以手动从源码管理系统(例如GitHub)下载所需的文件,然后将其放置在正确的位置,再进行后续的操作。 总结起来,OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054错误通常是由于网络连接问题引起的。通过检查网络连接、更换网络环境、使用代理或者手动下载文件等方法,可以解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [提交Git时报错:OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054](https://blog.csdn.net/qq_42203909/article/details/123882309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [安装vagrant报错OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54](https://download.csdn.net/download/weixin_38627213/14043306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [ERROR: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054解决方法](https://blog.csdn.net/JISOOLUO/article/details/103625488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值