本地打开代理,Git无法使用SSH连接GitHub

371 阅读2分钟

叙述

电脑C盘爆满,不知如何清理C盘,就此决定重装系统。重装系统完以后,我下载了很多相关开发的环境,此时我迫不得已打开代理加速,不然安装都不了。有镜像站,但是我本人偏好是,不是官网,心里不踏实。

环境装好后,信心满满开始配置Git。生成SSH密钥、公钥上传GitHub一气呵成,直到输入 ssh -T ``git@github.com

—— kex_exchange_identification: Connection closed by remote host 短短一行报错,让我在接下来的48小时里怀疑人生。翻遍全网博客,清一色的“检查公钥”“重启SSH服务”毫无新意,甚至有人建议“换根网线试试”…

我在这里不叙述,我解决问题的过程,解决此问题也很简单,但是网上的博客都千篇一律,都是抄袭别人的,发布到网上,没有一个能够解决此问题的,而且也是废话很多!

关键解法:SSH 协议必须通过 HTTP代理 连接!而90%的教程都忽略了这一点

解决方案

Step 1:获取核武器——ncat.exe
  1. 访问 nmap官网 下载安装包

  2. 安装时务必勾选ncat组件(默认不选!巨坑!)

  3. 记录安装路径(通常为 C:\Program Files (x86)\Nmap\ncat.exe

Step 2: SSH 配置的生死代码

你打开文件夹没有config文件的话,在找到ssh密钥的文件夹,创建config文件,没有后缀哦~

配置如下,

Host github.com
    Hostname ssh.github.com
    ProxyCommand "C:\Program Files (x86)\Nmap\ncat.exe" --proxy-type http --proxy 127.0.0.1:12334 %h %p
    IdentityFile ~/.ssh/id_rsa
    Port 443
    ServerAliveInterval 20
    User git

参数解析表

参数作用避坑指南
--proxy-type http声明代理类型为HTTP用socks5必挂
127.0.0.1:12334本地代理端口(下文教你查)填错直接凉凉
Port 443绕过公司/校园防火墙的神器改22端口立刻被阻断
Step 3:查清你的代理 端口
  1. 打开代理软件(Shadowsocks/V2Ray等)
  2. 找到 HTTP监听 端口(如下图中的1080)
  3. 替换配置中的12334为你的实际端口

最后, 你可以使用 ssh -T git@github.com 命令,测试git的连通性~

成功画面

Hi YourUsername! You've successfully authenticated...

失败排查清单: ✅ 检查ncat路径是否有空格(建议路径全程无中文和空格) ✅ 代理软件是否开启全局模式(PAC模式可能漏代理) ✅ 重启Git Bash/Cmd(配置缓存可能导致翻车)

致后来者

如果你也曾在深夜对着SSH报错抓狂,不妨在博客评论区留下你的故事——毕竟,每一个程序员的成长史,都是与报错信息搏斗的血泪史。