极简教程:GitLab 上配置 SSH Key(附常见问题解决)
每次
git clone都提示Permission denied或者Your SSH key has expired,?密钥过期不知如何更新?本文将手把手教你生成 SSH 密钥、添加到 GitLab、并验证连接,彻底告别密码输入和权限错误。
字节出品,必属精品。免费注册Coze,解锁下一代生产力工具。
为什么需要 SSH Key?
GitLab 支持 HTTPS 和 SSH 两种协议拉取/推送代码:
- HTTPS:每次操作都要输入用户名和密码(或 Personal Access Token),且容易暴露凭证。
- SSH:使用公钥加密认证,配置一次即可免密操作,更安全、更便捷。
SSH Key 由一对密钥组成:私钥 (留在本地,绝不能泄露)和公钥(上传到 GitLab 服务器)。当你连接 GitLab 时,服务器会用公钥加密一个随机字符串,只有你的私钥能解开,从而证明你的身份。
准备工作
- 一台安装了 Git 和 OpenSSH 的电脑(Windows、macOS、Linux 均可)
- 一个能登录的 GitLab 账号(自托管版或
gitlab.com均可)
第一步:生成 SSH 密钥对
打开终端(Windows 推荐使用 Git Bash 或 PowerShell)。
1.1 检查是否已有密钥
bash
ls ~/.ssh/id_rsa.pub
如果文件存在,可以跳过生成步骤,直接使用现有密钥(建议还是重新生成,确保安全强度)。
1.2 生成新密钥
bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa:密钥类型为 RSA-b 4096:4096 位长度(比默认 2048 更安全)-C:添加注释,通常用你的邮箱,便于识别
按提示操作:
- 保存路径 :直接按回车,使用默认路径
~/.ssh/id_rsa - 密码短语(passphrase):可以留空(直接回车),也可以设置一个密码(每次使用密钥需输入)。对于个人开发机,留空更方便。
输出示例:
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
第二步:复制公钥内容
执行以下命令查看公钥并复制:
bash
cat ~/.ssh/id_rsa.pub
你会看到类似这样的一长串字符:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC... your_email@example.com
全选并复制 (从 ssh-rsa 到最后的邮箱)。
💡 小技巧:Linux/macOS 可用
pbcopy或xclip直接复制到剪贴板。
bash# macOS pbcopy < ~/.ssh/id_rsa.pub # Linux (需安装 xclip) xclip -sel clip < ~/.ssh/id_rsa.pub
第三步:在 GitLab 上添加公钥
- 登录 GitLab ,点击右上角你的 头像 → Preferences(偏好设置)。
- 左侧菜单栏找到 SSH Keys(位于 "User Settings" 分组下)。
- 在 Key 文本框中粘贴刚才复制的公钥内容。
- 填写 Title :一个便于识别的名称,例如
我的笔记本或公司台式机。 - Expiration date (过期日期):
- 如果公司安全策略要求定期更换,请选择一个未来的日期(例如 1 年后)。
- 如果不希望过期,可以留空(部分 GitLab 版本默认永不过期,管理员可覆盖)。
- 点击 Add key 按钮。
添加成功后,该公钥会出现在列表中。
第四步:测试 SSH 连接
在终端执行:
bash
ssh -T git@gitlab.com
如果你使用的是自托管 GitLab ,将 gitlab.com 替换为你的 GitLab 域名或 IP,例如:
bash
ssh -T git@66.6.91.73
-
第一次连接时,会提示验证主机指纹,输入
yes并回车。 -
成功时,你会看到类似以下输出:
Welcome to GitLab, @your_username!
如果看到 Permission denied (publickey) 或 key has expired,请检查:
- 公钥是否完整复制(不要有空格或换行)
- 密钥是否已添加到正确的 GitLab 账号下
- 私钥权限是否正确:
chmod 600 ~/.ssh/id_rsa
第五步:使用 SSH 克隆仓库
现在你可以用 SSH 地址克隆项目了:
bash
git clone git@gitlab.com:your-group/your-project.git
之后所有 git push、git pull 都不再需要密码。
常见问题排查
Q1:添加密钥后仍然提示 Permission denied
可能原因:
- 你用的 SSH 私钥不是默认的
id_rsa,需要显式告诉 SSH 使用哪个密钥。
解决方法:ssh-add ~/.ssh/your_private_key - GitLab 账号没有该仓库的访问权限(检查项目成员权限)。
- 服务器地址写错了(例如
git@gitlab.com:group/project中的冒号被写成了斜杠)。
Q2:提示 Your SSH key has expired
- 登录 GitLab → SSH Keys 页面,找到过期的那条记录,删除后重新添加一个新公钥(或延长有效期)。
- 如果不想频繁过期,生成新密钥时不设置有效期(需管理员允许)。
Q3:多个密钥如何管理?
编辑 ~/.ssh/config 文件,为不同主机指定不同密钥:
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_rsa_gitlab
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
Q4:如何删除旧密钥?
在 GitLab 的 SSH Keys 页面,点击密钥旁边的 Remove 按钮即可。
总结
配置 SSH Key 是提升 Git 使用体验的基本功,仅需四步:
- 生成密钥对:
ssh-keygen - 复制公钥:
cat ~/.ssh/id_rsa.pub - 添加到 GitLab:Settings → SSH Keys
- 测试连接:
ssh -T git@gitlab.com
一次配置,长期受益。花 5 分钟切换到 SSH,告别重复输入密码的烦恼。
📌 拓展阅读: