如何解决Windows中SSH连接GitHub报错Connection reset by peer
在使用Windows系统通过SSH连接GitHub的过程中,不少开发者会遇到各种各样的报错,这些问题常常让人困扰不已,影响开发进度。本文将详细介绍我遇到的一个报错及完整的解决过程,希望能帮助大家顺利解决类似问题。
一、问题背景与报错现象
如今,GitHub已经不再支持使用账号密码的方式登录了,所以很多人在新电脑上选择使用SSH连接方式。我也不例外,在一切准备工作都完成后,满心期待地执行操作时,却遭遇了报错。报错信息如下:
$ git pull kex_exchange_identification: read: Connection reset by peer Connection reset by 20.205.243.160 port 22 fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
简单来说,报错提示连接特定的IP和端口时出现问题,无法读取远程仓库内容。它让我确认两件事,一是检查自己是否有正确的访问权限,二是查看所使用的Git仓库地址是否正确、仓库是否存在。
看到这个报错,我心想可能是自己某个步骤没操作对,于是果断删除了电脑上已有的SSH配置,重新创建并与GitHub进行配置关联。然而,重新操作后依旧报错,报错信息类似这样:
C:Windowssystem32>git clone git@github.com:GuanLola/interview-doc.git Cloning into 'interview-doc Connection closed by 20. 205.243. 166 port 22 fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
为了解决问题,我尝试将仓库从私有改为公开,可问题依旧存在。
二、排查与解决过程
网上很多教程都说可能是SSH连接GitHub的步骤没设置好,但我反复检查并尝试了多次,都没能解决问题,所以我判断应该不是SSH key的问题。既然读不到仓库,我突然想到在国内访问GitHub有时需要借助特殊手段(俗称“魔法”),会不会是网络限制(也就是“墙”的问题)呢?于是我尝试修改host地址,不过由于很多GitHub相关的IP解析域名都需要“魔法”才能正常访问,所以修改hosts文件并没有起到作用。
后来我意识到,当前电脑开了代理,或许问题就出在代理上。经过一番搜索“github ssh”相关内容,终于有了新线索。原来在Windows系统中,需要借助特定工具来代理SSH连接才行。我找到的工具是connect
,它是corkscrew
的替代品,能够通过HTTP/HTTPS代理进行SSH连接。下面是使用connect
工具解决问题的具体步骤:
(一)下载connect工具
你可以通过connect.exe下载Windows版本的connect
工具。下载完成后,把connect.exe
放到你方便操作的目录,比如我选择的是C:Program Filesconnect
。
(二)配置SSH使用connect工具
接下来,要对SSH进行配置,让它使用connect
工具通过代理连接GitHub 。具体操作如下:
- 打开
Git Bash
或者你常用的其他终端工具。 - 编辑
~/.ssh/config
文件,如果这个文件不存在,就手动创建一个。在终端输入以下命令来打开文件编辑界面:
notepad ~/.ssh/config
- 在打开的
~/.ssh/config
文件中添加下面这些内容:
Host github.com HostName ssh.github.com User git Port 443 IdentityFile ~/.ssh/id_rsa ProxyCommand "C:/Program Files/connect/connect.exe" -H 127.0.0.1:7890 %h %p
这里要注意,C:/Program Files/connect/connect.exe
需要根据你实际存放connect.exe
的路径进行修改;127.0.0.1:7890
是代理地址和端口,如果你使用的是Clash、Shadowsocks等其他代理工具,要按照实际情况进行调整。
(三)测试连接
完成配置文件的修改并保存后,通过下面的命令来测试是否成功连接到GitHub:
ssh -T git@github.com
要是一切正常,你会看到类似这样的输出:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
(四)拉取代码
当测试连接没问题后,就可以正常使用git pull
或者git clone
等命令来操作仓库了。比如,拉取代码可以使用:
git pull origin main
三、其他注意事项
- 如果你使用的是Clash、Shadowsocks等其他代理工具,要确保代理工具已经正确配置并且处于运行状态。
- 要是你使用的是HTTP代理而不是SOCKS代理,一定要保证
connect
工具的-H
参数配置正确。 - 如果执行
ssh -T git@github.com
这行代码时出现类似“Connection closed by 20.205.2……”这样的提示,那就说明可能存在两个问题,一是SSH连接GitHub没有成功,二是可能被网络限制了,这种情况下就需要借助工具代理SSH连接。代理的地址和端口可以在系统的“设置-网络-代理”里查找。
通过以上详细的步骤和注意事项,在Windows系统上通过代理使用SSH连接GitHub时遇到的报错问题就能够顺利解决了,希望对大家有帮助!