目录
SSH与HTTPS对比
| 特性 | SSH | HTTPS |
|---|---|---|
| 协议类型 | 加密的网络协议 | 加密的HTTP协议 |
| 端口 | 22 | 443 |
| 认证方式 | 密钥对(公钥/私钥) | 用户名+密码/令牌 |
| URL格式 | git@host:user/repo.git | https://host/user/repo.git |
| 首次配置 | 比较复杂(需生成配置密钥) | 简单(直接输入密码) |
| 速度 | 快 | 较慢 |
| 安全性 | 高 | 高(使用令牌时) |
| 便捷性 | 配置一次,永久使用 | 需要频繁输入凭证 |
| 公司网络 | 可能被防火墙阻挡(端口22) | 通常可以访问(端口443) |
平台支持情况:
| 平台 | SSH 支持 | HTTPS 支持 | 备注 |
|---|---|---|---|
| Gitee | ✅ 优秀 | ✅ 优秀 | 都推荐使用 |
| GitHub | ✅ 优秀 | ✅ 优秀 | 2021年后推荐令牌代替密码 |
| GitLab | ✅ 优秀 | ✅ 优秀 | 企业版可能有特殊配置 |
| 自建 Git | ✅ 需要配置 | ✅ 通常支持 | 取决于服务器配置 |
SSH中的账户公钥和仓库公钥对比
| 特性 | 账户公钥 | 仓库公钥(部署公钥) |
|---|---|---|
| 绑定对象 | 个人账户 | 单个仓库 |
| 作用范围 | 整个账户所有仓库 | 单个特定仓库 |
| 权限 | 读写权限(可 push/pull) | 只读权限(只能 pull) |
| 使用场景 | 个人开发、日常使用 | 服务器部署、CI/CD、自动化部署 |
| 安全性 | 高(绑定个人账户,个人级别) | 较高(仅限单个仓库,仓库级别) |
| 管理位置 | 账户设置→SSH公钥 | 仓库设置→部署公钥 |
账户公钥权限矩阵:
| 操作 | 自己的公开仓库 | 自己的私有仓库 | 别人的公开仓库 | 别人的私有仓库 |
|---|---|---|---|---|
| Clone | ✅ | ✅ | ✅ | ❌ |
| Pull(推送) | ✅ | ✅ | ✅ | ❌ |
| Push(拉取) | ✅ | ✅ | ⚠️(需权限) | ❌ |
| Fork | ✅ | ✅ | ✅ | ❌ |
仓库公钥权限矩阵:
| 操作 | 绑定的仓库(只读模式) | 绑定的仓库(读写模式) |
|---|---|---|
| Clone | ✅ | ✅ |
| Pull | ✅ | ✅ |
| Push | ❌ | ✅ |
| 其他操作 | ❌ | ❌ |
黄金法则:
- 个人开发 → 账户公钥(方便管理)
- 服务器/自动化 → 仓库公钥(安全隔离)
- 权限最小化 → 只给必要的权限
- 密钥分离 → 不同用途使用不同密钥
- 仓库公钥是给机器用的,账户公钥是给人用的。
SSH中的私钥和公钥对比
| 特性 | 私钥(id_rsa/id_ed25519) | 公钥(id_rsa.pub/id_ed25519.pub) |
|---|---|---|
| 保密性 | 🔒绝对保密,永不外传 | 📢可以公开 |
| 存储位置 | 本地计算机(仅自己) | 远程服务器(Gitee/GitHub等) |
| 文件扩展名 | 无扩展名 | .pub |
| 权限设置 | 600 (rw-------) | 644 (rw-r--r--) |
| 生成顺序 | 先生成私钥,再导出公钥 | 从私钥派生生成 |
| 丢失后果 | 灾难性,需重新生成 | 无影响,可从私钥重新生成 |
| 使用场景 | 身份验证、解密、签名 | 验证、加密、验签 |
- 每次 SSH 连接都会自动使用对应的私钥进行验证
- 一台电脑可以有多对密钥,通过配置文件管理
git代理
查看代理
git
// 查看全局代理
git config --global --get http.proxy # 应该没有输出
git config --global --get https.proxy # 应该没有输出
// 查看局部代理
git config --local --get http.proxy # 应该没有输出
git config --local --get https.proxy # 应该没有输出

添加代理
git
// 全局代理,影响全部git仓库
git config --global http.proxy socks5://127.0.0.1:端口号
git config --global https.proxy socks5://127.0.0.1:端口号
// 局部代理,只影响当前git仓库
git config --local http.proxy socks5://127.0.0.1:端口号
git config --local https.proxy socks5://127.0.0.1:端口号

删除代理
git
# 删除 HTTP 代理配置
git config --global --unset http.proxy
# 删除 HTTPS 代理配置
git config --global --unset https.proxy
# 验证是否删除成功
git config --global --get http.proxy # 应该没有输出
git config --global --get https.proxy # 应该没有输出
