使用 Git 从 HTTPS 切换至 SSH

使用 Git 从 HTTPS 切换至 SSH
小米里的大麦使用 Git 从 HTTPS 切换至 SSH
起因是我在 Linux 中使用 git push
推送经常卡住或失败,真的很烦,于是选择 切换成 SSH ,可以提高稳定性和体验,比较适合在 Linux 系统开发环境中长期使用。当然本文的方法也同样适用于 Windows。
1. 确认是否已生成 SSH 密钥对
先检查是否已有 .ssh/id_rsa
文件:
1 | ls ~/.ssh |
如果看到了 id_rsa
和 id_rsa.pub
就说明已经有了密钥对。如果没有,就执行下面的命令生成:
1 | ssh-keygen -t rsa -b 4096 -C "你的邮箱" |
一路回车即可生成(个人使用,建议不设密码短语,会方便些)。
2. 将 SSH 公钥添加到远程仓库平台(如 GitHub / Gitee)
1. 复制公钥内容
1 | cat ~/.ssh/id_rsa.pub |
复制输出的整段文本(以 ssh-rsa
开头,以邮箱结尾)。对应 Windows 实际路径为 C:\Users\你的用户名\.ssh\
。
2. 添加到远程平台
1. GitHub:
- 登录 GitHub。
- 点击头像 →
Settings
→SSH and GPG keys
。 - 点
New SSH key
,粘贴公钥,命名为“centos 7.6”等,命名自定义就好。
2. Gitee:
- 登录 Gitee。
- 用户头像 →
设置
→SSH公钥
。 - 粘贴进去即可。
3. 切换仓库的远程地址从 HTTPS ➜ SSH
切换命令如下(在项目根目录下执行):
1 | git remote -v # 查看当前远程仓库地址 |
4. 测试 SSH 是否连接成功
1 | ssh -T git@github.com |
第一次会提示:
1 | The authenticity of host 'github.com (IP)' can't be established... |
输入 yes
后,如果成功,会看到:
1 | Hi yourname! You've successfully authenticated, but GitHub does not provide shell access. |
这里可能存在一个
warning
,大概意思是说 shell 中不能使用,不用管,这就已经配置好了!
5. 配置完成,一键三连!
6. 解决 GitHub SSH 连接被屏蔽:配置 443 端口
没错,又是我,经过 SSH 一段长期稳定后,它又又又又出问题了,于是就诞生了下面的内容(此方法仅适用于 GitHub,Gitee 等平台需不同配置):
22 端口(默认的 SSH 方式)
- 优点
- 是 GitHub 官方最原生的 SSH 接口,最直接,少一层“伪装”。
- 如果网络环境宽松(家里宽带、海外服务器),几乎是最快最稳的。
- 缺点
- 很多公司 / 校园 / 国内云服务器,会屏蔽 22 端口(因为它是典型的 SSH 管理端口,容易被滥用)。
- 一旦被封,直接
Connection timed out
,完全没法用。
443 端口(备用 SSH 方式)
- 优点
- 443 是 HTTPS 的标准端口,几乎任何网络都必须放行(否则连网页都上不了)。
- GitHub 把 SSH 流量伪装成走 443,看起来像 HTTPS,因此能穿透大部分防火墙和限制。
- 对于国内网络环境(尤其是云主机 / 校园网 / 公共 WiFi),稳定性往往比 22 更好。
- 缺点
- 在极少数情况下,某些 DPI(深度包检测)会识别“这不是 HTTPS 流量”然后丢弃,但这种情况比较罕见。
- 多了一层转发,理论上延迟可能略高,但对推送/拉取代码来说几乎无感。
总结:
- 22 端口:原生 SSH,速度可能更快,但容易被封。👉 如果在家宽带上,22 可能稳定;但一旦换环境(比如公司 VPN、云主机),22 就可能挂掉。
- 443 端口:稳定性最高,几乎所有网络环境都可用。👉 从长期和通用性来看,SSH 走 443 更稳定,因为 443 基本不会被封。443 和 22 性能差异极小,日常使用无感。
在国内或公司网络环境下,Git SSH 默认 22 端口有时会被屏蔽,导致推送失败(Connection timed out
)。解决办法是切换到 GitHub 提供的备用入口: 443 端口 SSH。下面介绍操作步骤。
1. 查看当前远程仓库地址
1 | git remote -v |
输出类似:
1 | origin git@github.com:用户名/仓库名.git (fetch) |
默认都是 22 端口的 SSH。
2. 切换到 SSH 443 端口
1 | git remote set-url origin ssh://git@ssh.github.com:443/用户名/仓库名.git |
注意:ssh.github.com
+ :443
是 GitHub 提供的备用端口,/用户名/仓库名.git
替换成你的仓库路径。
3. 第一次连接需要确认主机指纹(验证)
测试连接(任意一个即可,都执行也行):
1 | ssh -T git@github.com |
会提示:
1 | The authenticity of host '[ssh.github.com]:443 ...' can't be established. |
输入完整的 yes
并回车,SSH 会把主机写入 ~/.ssh/known_hosts
,以后就不再提示。成功后应看到:
1 | Hi <你的用户名>! You've successfully authenticated, but GitHub does not provide shell access. |
🎉 表示配置成功,现在你可以正常执行 git push
了!
4. 推送代码
1 | git push |
现在 SSH 走 443 端口,推送应该稳定可用。适合任何仓库、任何网络环境。
5. 恢复默认 22 端口(可选)
如果网络环境允许,想还原默认 SSH:
1 | git remote set-url origin git@github.com:用户名/仓库名.git |
再推送就会回到原来的 22 端口方式。
7. 修改本地 SSH 配置文件(另一种方法)
如果上面的方法无效,可尝试这里的方法:通过修改本地 SSH 配置文件,让所有对 github.com
的 SSH 请求自动转发到 ssh.github.com:443
。
1. 配置文件路径
平台 | 路径 |
---|---|
Linux / macOS | ~/.ssh/config |
Windows(Git Bash) | C:\Users\<用户名>\.ssh\config |
注意:
.ssh
目录和config
文件权限需设置正确,避免 SSH 拒绝加载。
1 | chmod 700 ~/.ssh |
2. 添加配置内容
如果已有其他 Host 配置(如私有服务器 IP),不要删除或覆盖,只需 追加 即可。SSH 会按 Host 匹配规则自动选择。
打开或创建 ~/.ssh/config
,添加以下内容:
1 | Host github.com |
说明:
Host github.com
:匹配所有git@github.com:xxx/yyy.git
的请求。HostName ssh.github.com
:GitHub 提供的 SSH over HTTPS 网关。Port 443
:使用 HTTPS 常用端口,绕过 22 端口封锁。User git
:SSH 协议要求用户为git
。
后面的步骤就和上面一样了:验证和推送。