在使用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 。具体操作如下:

  1. 打开Git Bash或者你常用的其他终端工具。
  2. 编辑~/.ssh/config文件,如果这个文件不存在,就手动创建一个。在终端输入以下命令来打开文件编辑界面:
notepad ~/.ssh/config 
  1. 在打开的~/.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 

三、其他注意事项

  1. 如果你使用的是Clash、Shadowsocks等其他代理工具,要确保代理工具已经正确配置并且处于运行状态。
  2. 要是你使用的是HTTP代理而不是SOCKS代理,一定要保证connect工具的-H参数配置正确。
  3. 如果执行ssh -T git@github.com这行代码时出现类似“Connection closed by 20.205.2……”这样的提示,那就说明可能存在两个问题,一是SSH连接GitHub没有成功,二是可能被网络限制了,这种情况下就需要借助工具代理SSH连接。代理的地址和端口可以在系统的“设置-网络-代理”里查找。

通过以上详细的步骤和注意事项,在Windows系统上通过代理使用SSH连接GitHub时遇到的报错问题就能够顺利解决了,希望对大家有帮助!