GitHub 推送该用 SSH 还是 HTTPS?一篇讲透两种登录方式的区别

张开发
2026/4/10 1:45:06 15 分钟阅读

分享文章

GitHub 推送该用 SSH 还是 HTTPS?一篇讲透两种登录方式的区别
很多人第一次把本地仓库连接到 GitHub 时都会遇到同一个问题SSH和HTTPS到底该选哪一个表面上看它们只是仓库地址不一样gitgithub.com:username/repo.git和https://github.com/username/repo.git但真到了实际使用阶段两者的区别远不只是“写法不同”。它们背后对应的是两套完全不同的身份认证逻辑配置方式不同出错表现不同后续维护成本也不同。这篇文章不讲空泛概念重点说三件事SSH和HTTPS到底是怎么工作的。两种方式各自适合什么人。如果只是想稳定把代码推上 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时仓库地址一般长这样gitgithub.com:username/repo.git它不依赖浏览器登录而是依赖一对密钥本机保存私钥GitHub 账号保存公钥推送代码时GitHub 会验证你这台电脑是否持有对应私钥。所以SSH本质上更像“这台电脑是否拥有正确钥匙”的模式。三、HTTPS 的优点和缺点1. 优点上手门槛低对大多数刚接触 GitHub 的用户来说HTTPS最大的优点就是简单。一般只需要把远程地址切到HTTPS然后执行一次推送后面跟着提示完成登录即可。gitremote set-url origin https://github.com/username/repo.gitgitpush 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的优势主要体现在长期使用阶段。一旦配置完成日常pull、push往往都比较直接不需要反复处理网页登录或 Token 输入。对于命令行使用频率高的人来说这种体验会更顺手。2. 优点更适合多仓库和长期开发如果你平时经常和 GitHub 打交道或者本地维护多个仓库SSH的优势会慢慢体现出来。因为它的认证是围绕“这台机器”建立的不是围绕一次次登录建立的。只要密钥链路完整多个仓库的使用体验通常比较统一。3. 优点认证链路清晰SSH出问题时排查范围通常集中在几个点本地私钥在不在GitHub 里有没有对应公钥仓库远程地址是不是 SSH 格式当前 SSH 是否连接正常虽然配置门槛高一些但逻辑其实是清楚的。4. 缺点首次配置更麻烦SSH最容易劝退人的地方就是前期配置步骤明显更多。通常会涉及这些动作生成密钥对找到公钥内容登录 GitHub 添加公钥测试 SSH 是否能连通确认本地仓库远程地址是 SSH 格式只要中间有一步没处理好就可能报出很常见的错误Permission denied(publickey)5. 缺点私钥丢失后恢复成本更高这是SSH最现实的问题。如果你遇到下面这些情况重装系统更换电脑用户目录迁移.ssh目录没有备份那原来的认证链路就可能直接断掉。这时候即使仓库地址没问题GitHub 用户名也没问题推送仍然会失败。很多人会误以为是“改用户名导致不能 push”其实真正失效的是本地密钥环境。五、安全性怎么比较很多文章喜欢简单地下结论SSH更安全HTTPS不够安全。这种说法不够准确。更准确的说法应该是两种方式都可以很安全风险高低取决于你怎么管理凭据1. SSH 的安全重点SSH的核心在私钥。只要私钥保存在可信设备上不泄露不乱传安全性是很高的。但反过来讲只要私钥泄露对方就有可能拿着这把“钥匙”进行认证。2. HTTPS 的安全重点HTTPS的核心在PAT或凭据缓存。如果 Token 泄露风险和 SSH 私钥泄露本质上是类似的都是认证材料外流。所以真正的安全重点不是“协议名字好不好听”而是不要把 Token 明文写进脚本不要把 Token 截图发别人不要把敏感凭据随便保存在不可信环境里从实际工程角度看只要凭据管理规范SSH和HTTPS都足够安全。六、从维护成本看区别更明显如果把 GitHub 认证看成长期维护的一部分而不是一次性操作那么SSH和HTTPS的差异会更明显。HTTPS 的维护特点前期成本低出问题时更容易恢复对新手更友好对偶尔使用 GitHub 的人更合适SSH 的维护特点前期配置成本高一旦配好长期使用很舒服更适合固定开发机更适合长期、多仓库、命令行密集场景所以它们的真实差别不是“能不能用”而是“谁的维护模型更适合你”。七、为什么很多人改了 GitHub 用户名后突然不能 push这是一个很典型的误区。很多人修改 GitHub 用户名之后本地仓库刚好也推送失败于是就把两件事直接划上等号认为是用户名变化导致 Git 仓库坏了。实际上大多数情况下真正要检查的是下面几项远程仓库地址是不是还指向旧用户名当前仓库使用的是SSH还是HTTPS如果是SSH本机私钥是否还存在GitHub 账号是否保留了对应公钥如果是HTTPS当前登录态或 Token 是否有效也就是说用户名变化通常只是一个触发排查的时间点不一定是真正的根因。真正导致push失败的很多时候是认证链路失效。八、普通用户到底该怎么选如果只考虑“当前阶段最实用的选择”其实并不复杂。适合先用 HTTPS 的情况你可以优先用HTTPS如果你符合下面这些情况刚开始接触 GitHub主要在 Windows 本地开发只是想把代码稳定推上去不想处理密钥、agent、SSH 配置当前最重要的是恢复可用性适合后续切换 SSH 的情况你可以考虑SSH如果你已经进入下面这些阶段GitHub 使用频率很高手头有多个仓库更依赖命令行工作流希望减少重复认证操作能接受一次性的环境配置成本九、一个更实用的选择思路很多人在SSH和HTTPS之间纠结根本原因不是技术上分不清而是把“当前需求”和“长期习惯”混在了一起。如果拆开看选择会简单很多第一阶段先恢复可用如果你现在的目标是尽快把代码推送成功那就优先选HTTPS。因为它的恢复路径最短理解成本最低出问题也相对好排查。第二阶段再优化体验等后面 GitHub 用得越来越频繁再切回SSH也完全来得及。这样做的好处是先解决“能不能用”再解决“用起来顺不顺”从工程实践看这种顺序通常更稳。十、对比汇总对比项HTTPSSSH上手难度低中等偏高首次配置成本低高日常使用流畅度中等高换电脑后的恢复容易取决于私钥是否保留排错难度相对低相对高适合新手是一般适合长期重度使用可以更合适常见认证方式浏览器授权 / PATSSH 密钥十一、最后的建议如果你只是想把仓库正常推上 GitHub不希望把时间花在环境认证问题上HTTPS往往是更合适的起点。如果你已经进入长期开发阶段希望本地 Git 环境更统一、更顺手SSH会是更好的长期方案。所以更现实的建议不是二选一而是分阶段处理先用HTTPS把 GitHub 用起来后续有需要再配置SSH这样既不会被认证问题卡住也给后续优化留出了空间。附常用命令查看当前远程地址gitremote-v切换为 HTTPSgitremote set-url origin https://github.com/username/repo.git切换为 SSHgitremote set-url origin gitgithub.com:username/repo.git测试 SSH 是否可用ssh-Tgitgithub.com如果你遇到的是“改了 GitHub 用户名之后突然不能 push”优先检查的通常不是 Git 提交用户名而是下面这三件事远程地址是否正确当前使用的是哪种认证方式对应的认证材料是否仍然有效很多 GitHub 推送失败的问题最后都不是仓库本身的问题而是认证链路断了。

更多文章