GitLab SSH 密钥配置完全指南:告别 HTTPS,拥抱高效安全的 SSH 连接

134 阅读5分钟

还在用 HTTPS 拉取代码?每次都要输密码?是时候切换到更安全、更高效的 SSH 连接了!

为什么选择 SSH 而非 HTTPS?

在开始配置之前,先了解为什么推荐使用 SSH:

  • 无需频繁输入凭证:一次配置,永久使用
  • 更安全:使用非对称加密,比密码更安全
  • 适合自动化:CI/CD、脚本执行更方便
  • 速度更快:无需 HTTP 协议开销

第一步:检查当前远程连接方式

首先,查看你的仓库当前使用的远程连接方式:

bash

# 查看当前远程仓库配置
git remote -v

# 如果显示的是 HTTPS URL(如下)
# origin  https://gitlab.com/username/repository.git (fetch)
# origin  https://gitlab.com/username/repository.git (push)

第二步:从 HTTPS 切换到 SSH

如果当前是 HTTPS 连接,需要切换到 SSH:

bash

# 将远程 URL 从 HTTPS 改为 SSH
git remote set-url origin git@gitlab.com:username/repository.git

# 再次验证是否修改成功
git remote -v
# 现在应该显示 SSH URL:
# origin  git@gitlab.com:username/repository.git (fetch)
# origin  git@gitlab.com:username/repository.git (push)

第三步:生成 SSH 密钥

如果你还没有 SSH 密钥,或者想创建新的密钥:

选项 A:使用 Ed25519 算法(推荐)

Ed25519 是一种基于椭圆曲线密码学的签名算法。椭圆曲线密码学在相同的安全强度下,所需的密钥长度比传统的 RSA 短很多
更短、更快、更简洁

bash

# 生成 Ed25519 密钥(更安全、更快)
ssh-keygen -t ed25519 -C "your_email@example.com"

选项 B:使用 RSA 算法(兼容性更好)

bash

# 生成 RSA 4096 位密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

密钥生成过程详解

执行上述命令后,你会看到:

  1. 保存路径:直接按回车使用默认路径 (~/.ssh/id_ed25519 或 ~/.ssh/id_rsa)

  2. 密码设置

    • 设置密码:更安全,但每次使用需要输入密码
    • 不设密码:更方便,适合自动化场景
    • 推荐:设置一个强密码,然后配置 SSH 代理记住密码

第四步:管理 SSH 代理

SSH 代理可以帮助你管理密钥,避免重复输入密码:

bash

# 启动 SSH 代理
eval "$(ssh-agent -s)"
# 应该看到类似:Agent pid 12345

# 添加你的私钥到 SSH 代理

# 如果是 Ed25519 密钥:
ssh-add ~/.ssh/id_ed25519

# 如果是 RSA 密钥:
ssh-add ~/.ssh/id_rsa

# 查看已添加的密钥
ssh-add -l

让 SSH 代理自动启动(Windows Git Bash)

在 ~/.bashrc 或 ~/.bash_profile 中添加:

bash

# 自动启动 ssh-agent
if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval "$(ssh-agent -s)"
  ssh-add ~/.ssh/id_ed25519  # 或你的密钥路径
fi

第五步:获取并复制公钥

bash

# 查看公钥内容
cat ~/.ssh/id_ed25519.pub

# 或使用以下命令复制到剪贴板:

# Git Bash(Windows)
cat ~/.ssh/id_ed25519.pub | clip

# macOS
pbcopy < ~/.ssh/id_ed25519.pub

# Linux(需要安装 xclip)
xclip -sel clip < ~/.ssh/id_ed25519.pub

第六步:在 GitLab 中添加 SSH 密钥

  1. 登录 GitLab:访问 GitLab

  2. 进入设置

    • 点击右上角头像 → Preferences(或 Settings)
    • 左侧菜单选择 SSH Keys
  3. 添加密钥

    • 在 Key 文本框中粘贴公钥
    • 在 Title 中输入有意义的名称(如:"MacBook Pro - Work")
    • (可选)设置过期时间
    • 点击 Add key

第七步:测试 SSH 连接

bash

# 测试 SSH 连接到 GitLab
ssh -T git@gitlab.com

# 如果一切正常,你会看到:
# Welcome to GitLab, @your_username!

如果连接失败,常见问题排查:

bash

# 1. 检查 SSH 配置
cat ~/.ssh/config

# 2. 如果是公司 GitLab,可能需要特定配置
# 在 ~/.ssh/config 中添加:
Host gitlab.company.com
  HostName gitlab.company.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  PreferredAuthentications publickey

# 3. 检查防火墙和网络
ssh -vT git@gitlab.com  # 详细模式查看连接过程

第八步:使用 SSH 克隆仓库

现在你可以使用 SSH 方式克隆仓库了:

bash

# 使用 SSH URL 克隆
git clone git@gitlab.com:username/repository.git

# 而不是 HTTPS URL:
# git clone https://gitlab.com/username/repository.git

高级技巧与最佳实践

1. 为不同账户使用不同密钥

bash

# 生成第二个密钥
ssh-keygen -t ed25519 -C "personal_email@example.com" -f ~/.ssh/id_ed25519_personal

# 配置 ~/.ssh/config
Host gitlab.com-work
  HostName gitlab.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

Host gitlab.com-personal
  HostName gitlab.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
  IdentitiesOnly yes

# 使用不同的主机别名克隆
git clone git@gitlab.com-work:company/project.git
git clone git@gitlab.com-personal:personal/project.git

2. 检查现有密钥

bash

# 查看所有 SSH 密钥
ls -la ~/.ssh/

# 检查密钥指纹
ssh-keygen -lf ~/.ssh/id_ed25519.pub

3. 更新已存在的仓库

bash

# 如果你已经用 HTTPS 克隆了仓库,想切换到 SSH
cd existing-repository
git remote set-url origin git@gitlab.com:username/repository.git
git remote -v  # 验证

4. 安全注意事项

  • 🔐 定期轮换密钥:每 6-12 个月更新一次
  • 🗑️ 删除不再使用的密钥:在 GitLab 设置中及时清理
  • 📝 记录密钥用途:为每个密钥添加有意义的注释
  • 🔍 监控使用情况:定期检查 GitLab 的 SSH 密钥访问日志

常见问题解答

Q:为什么 SSH 连接失败?
A:检查 .ssh 目录权限(应该是 700),密钥文件权限(应该是 600),以及 GitLab 上的公钥是否正确。

Q:可以同时使用多个 SSH 密钥吗?
A:可以!通过 ~/.ssh/config 文件配置不同主机使用不同密钥。

Q:Windows 上有什么特别要注意的?
A:确保使用 Git Bash 或 WSL,而不是 CMD。检查 Windows 防火墙设置。

Q:如何验证密钥是否生效?
A:运行 ssh -T git@gitlab.com,看到欢迎消息即表示成功。

总结

切换到 SSH 连接不仅能提升你的 Git 使用体验,还能增强安全性。虽然初始设置需要一些步骤,但一次配置后,你将享受无缝的代码推送和拉取体验。

记住这个简单的转换流程:

  1. 检查当前连接方式
  2. 生成SSH 密钥
  3. 添加密钥到 SSH 代理
  4. 上传公钥到 GitLab
  5. 测试连接
  6. 享受无密码的 Git 操作

现在就去配置吧,告别繁琐的密码输入,拥抱高效的开发工作流!


小提示:如果你在团队中工作,建议将这篇指南分享给团队成员,统一使用 SSH 可以提高整个团队的工作效率。