很多人第一次把本地仓库连接到 GitHub 时,都会遇到同一个问题:

SSHHTTPS 到底该选哪一个?

表面上看,它们只是仓库地址不一样:

git@github.com:username/repo.git

https://github.com/username/repo.git

但真到了实际使用阶段,两者的区别远不只是“写法不同”。

它们背后对应的是两套完全不同的身份认证逻辑,配置方式不同,出错表现不同,后续维护成本也不同。

这篇文章不讲空泛概念,重点说三件事:

  1. SSHHTTPS 到底是怎么工作的。
  2. 两种方式各自适合什么人。
  3. 如果只是想稳定把代码推上 GitHub,应该怎么选。

一、先给结论

如果你只是想尽快把代码推上去,尤其是在 Windows 本地开发环境下,优先推荐 HTTPS

如果你已经长期使用 Git,平时管理多个仓库,或者更依赖命令行开发,SSH 的长期体验通常更好。

可以简单理解成下面这句话:

  • 想快速恢复可用,选 HTTPS
  • 想长期用得顺手,选 SSH

这不是谁更“高级”的问题,而是谁更适合当前阶段。

二、HTTPS 和 SSH 本质上差在哪

很多人以为这只是访问地址写法不同,其实背后最大的区别在于:

GitHub 用什么方式确认你是谁。

1. HTTPS:账号授权思路

使用 HTTPS 时,Git 是通过网页协议访问 GitHub 的。

仓库地址一般长这样:

https://github.com/username/repo.git

推送代码时,GitHub 需要确认你有没有权限,于是会走账号授权这条路。现在常见的认证方式有两种:

  • 浏览器登录授权
  • Personal Access Token,也就是常说的 PAT

也就是说,HTTPS 更接近“登录账号后获得授权”的模式。

2. SSH:密钥认证思路

使用 SSH 时,仓库地址一般长这样:

git@github.com:username/repo.git

它不依赖浏览器登录,而是依赖一对密钥:

  • 本机保存私钥
  • GitHub 账号保存公钥

推送代码时,GitHub 会验证你这台电脑是否持有对应私钥。

所以,SSH 本质上更像“这台电脑是否拥有正确钥匙”的模式。

三、HTTPS 的优点和缺点

1. 优点:上手门槛低

对大多数刚接触 GitHub 的用户来说,HTTPS 最大的优点就是简单。

一般只需要把远程地址切到 HTTPS,然后执行一次推送,后面跟着提示完成登录即可。

git remote set-url origin https://github.com/username/repo.git
git push origin main

如果系统里装了 Git Credential Manager,认证过程通常会更顺,很多时候不需要反复输入。

2. 优点:更适合普通本地开发场景

如果你的使用场景主要是:

  • 课程作业
  • 个人项目
  • 笔记备份
  • 偶尔同步代码

HTTPS 基本已经够用。

它不要求你先理解这些东西:

  • 公钥和私钥的区别
  • ssh-agent 是什么
  • 为什么会出现 Permission denied (publickey)

对于很多用户来说,少一层环境配置,意味着少一层出错机会。

3. 优点:换电脑后恢复更容易

HTTPS 的一个现实优势是恢复成本低。

如果你换了电脑,或者重装了系统,通常只需要重新完成 GitHub 登录授权,或者重新生成一个 PAT,就可以继续推送。

它不会像 SSH 一样强依赖旧机器上的私钥文件是否还在。

4. 缺点:依赖 Token 或登录态

HTTPS 虽然上手简单,但并不意味着完全没有认证成本。

GitHub 早就不支持直接用账号密码推送代码了,所以你最终还是要依赖:

  • 浏览器授权
  • PAT

如果本地凭据缓存失效,或者 Token 过期,还是会再次要求认证。

四、SSH 的优点和缺点

1. 优点:配好之后使用体验更稳定

SSH 的优势,主要体现在长期使用阶段。

一旦配置完成,日常 pullpush 往往都比较直接,不需要反复处理网页登录或 Token 输入。

对于命令行使用频率高的人来说,这种体验会更顺手。

2. 优点:更适合多仓库和长期开发

如果你平时经常和 GitHub 打交道,或者本地维护多个仓库,SSH 的优势会慢慢体现出来。

因为它的认证是围绕“这台机器”建立的,不是围绕一次次登录建立的。只要密钥链路完整,多个仓库的使用体验通常比较统一。

3. 优点:认证链路清晰

SSH 出问题时,排查范围通常集中在几个点:

  • 本地私钥在不在
  • GitHub 里有没有对应公钥
  • 仓库远程地址是不是 SSH 格式
  • 当前 SSH 是否连接正常

虽然配置门槛高一些,但逻辑其实是清楚的。

4. 缺点:首次配置更麻烦

SSH 最容易劝退人的地方,就是前期配置步骤明显更多。

通常会涉及这些动作:

  1. 生成密钥对
  2. 找到公钥内容
  3. 登录 GitHub 添加公钥
  4. 测试 SSH 是否能连通
  5. 确认本地仓库远程地址是 SSH 格式

只要中间有一步没处理好,就可能报出很常见的错误:

Permission denied (publickey)

5. 缺点:私钥丢失后恢复成本更高

这是 SSH 最现实的问题。

如果你遇到下面这些情况:

  • 重装系统
  • 更换电脑
  • 用户目录迁移
  • .ssh 目录没有备份

那原来的认证链路就可能直接断掉。

这时候即使仓库地址没问题,GitHub 用户名也没问题,推送仍然会失败。

很多人会误以为是“改用户名导致不能 push”,其实真正失效的是本地密钥环境。

五、安全性怎么比较

很多文章喜欢简单地下结论:SSH 更安全,HTTPS 不够安全。

这种说法不够准确。

更准确的说法应该是:

  • 两种方式都可以很安全
  • 风险高低取决于你怎么管理凭据

1. SSH 的安全重点

SSH 的核心在私钥。

只要私钥保存在可信设备上,不泄露,不乱传,安全性是很高的。

但反过来讲,只要私钥泄露,对方就有可能拿着这把“钥匙”进行认证。

2. HTTPS 的安全重点

HTTPS 的核心在 PAT 或凭据缓存。

如果 Token 泄露,风险和 SSH 私钥泄露本质上是类似的,都是认证材料外流。

所以真正的安全重点不是“协议名字好不好听”,而是:

  • 不要把 Token 明文写进脚本
  • 不要把 Token 截图发别人
  • 不要把敏感凭据随便保存在不可信环境里

从实际工程角度看,只要凭据管理规范,SSHHTTPS 都足够安全。

六、从维护成本看,区别更明显

如果把 GitHub 认证看成长期维护的一部分,而不是一次性操作,那么 SSHHTTPS 的差异会更明显。

HTTPS 的维护特点

  • 前期成本低
  • 出问题时更容易恢复
  • 对新手更友好
  • 对偶尔使用 GitHub 的人更合适

SSH 的维护特点

  • 前期配置成本高
  • 一旦配好,长期使用很舒服
  • 更适合固定开发机
  • 更适合长期、多仓库、命令行密集场景

所以它们的真实差别不是“能不能用”,而是“谁的维护模型更适合你”。

七、为什么很多人改了 GitHub 用户名后突然不能 push

这是一个很典型的误区。

很多人修改 GitHub 用户名之后,本地仓库刚好也推送失败,于是就把两件事直接划上等号,认为是用户名变化导致 Git 仓库坏了。

实际上,大多数情况下真正要检查的是下面几项:

  1. 远程仓库地址是不是还指向旧用户名
  2. 当前仓库使用的是 SSH 还是 HTTPS
  3. 如果是 SSH,本机私钥是否还存在
  4. GitHub 账号是否保留了对应公钥
  5. 如果是 HTTPS,当前登录态或 Token 是否有效

也就是说,用户名变化通常只是一个触发排查的时间点,不一定是真正的根因。

真正导致 push 失败的,很多时候是认证链路失效。

八、普通用户到底该怎么选

如果只考虑“当前阶段最实用的选择”,其实并不复杂。

适合先用 HTTPS 的情况

你可以优先用 HTTPS,如果你符合下面这些情况:

  • 刚开始接触 GitHub
  • 主要在 Windows 本地开发
  • 只是想把代码稳定推上去
  • 不想处理密钥、agent、SSH 配置
  • 当前最重要的是恢复可用性

适合后续切换 SSH 的情况

你可以考虑 SSH,如果你已经进入下面这些阶段:

  • GitHub 使用频率很高
  • 手头有多个仓库
  • 更依赖命令行工作流
  • 希望减少重复认证操作
  • 能接受一次性的环境配置成本

九、一个更实用的选择思路

很多人在 SSHHTTPS 之间纠结,根本原因不是技术上分不清,而是把“当前需求”和“长期习惯”混在了一起。

如果拆开看,选择会简单很多:

第一阶段:先恢复可用

如果你现在的目标是尽快把代码推送成功,那就优先选 HTTPS

因为它的恢复路径最短,理解成本最低,出问题也相对好排查。

第二阶段:再优化体验

等后面 GitHub 用得越来越频繁,再切回 SSH 也完全来得及。

这样做的好处是:

  • 先解决“能不能用”
  • 再解决“用起来顺不顺”

从工程实践看,这种顺序通常更稳。

十、对比汇总

对比项 HTTPS SSH
上手难度 中等偏高
首次配置成本
日常使用流畅度 中等
换电脑后的恢复 容易 取决于私钥是否保留
排错难度 相对低 相对高
适合新手 一般
适合长期重度使用 可以 更合适
常见认证方式 浏览器授权 / PAT SSH 密钥

十一、最后的建议

如果你只是想把仓库正常推上 GitHub,不希望把时间花在环境认证问题上,HTTPS 往往是更合适的起点。

如果你已经进入长期开发阶段,希望本地 Git 环境更统一、更顺手,SSH 会是更好的长期方案。

所以更现实的建议不是二选一,而是分阶段处理:

  1. 先用 HTTPS 把 GitHub 用起来
  2. 后续有需要,再配置 SSH

这样既不会被认证问题卡住,也给后续优化留出了空间。

附:常用命令

查看当前远程地址

git remote -v

切换为 HTTPS

git remote set-url origin https://github.com/username/repo.git

切换为 SSH

git remote set-url origin git@github.com:username/repo.git

测试 SSH 是否可用

ssh -T git@github.com

如果你遇到的是“改了 GitHub 用户名之后突然不能 push”,优先检查的通常不是 Git 提交用户名,而是下面这三件事:

  • 远程地址是否正确
  • 当前使用的是哪种认证方式
  • 对应的认证材料是否仍然有效

很多 GitHub 推送失败的问题,最后都不是仓库本身的问题,而是认证链路断了。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐