极简教程:GitLab 上配置 SSH Key(附常见问题解决)

极简教程: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:添加注释,通常用你的邮箱,便于识别

按提示操作:

  1. 保存路径 :直接按回车,使用默认路径 ~/.ssh/id_rsa
  2. 密码短语(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 可用 pbcopyxclip 直接复制到剪贴板。

bash 复制代码
# macOS
pbcopy < ~/.ssh/id_rsa.pub
# Linux (需安装 xclip)
xclip -sel clip < ~/.ssh/id_rsa.pub

第三步:在 GitLab 上添加公钥

  1. 登录 GitLab ,点击右上角你的 头像Preferences(偏好设置)。
  2. 左侧菜单栏找到 SSH Keys(位于 "User Settings" 分组下)。
  3. Key 文本框中粘贴刚才复制的公钥内容。
  4. 填写 Title :一个便于识别的名称,例如 我的笔记本公司台式机
  5. Expiration date (过期日期):
    • 如果公司安全策略要求定期更换,请选择一个未来的日期(例如 1 年后)。
    • 如果不希望过期,可以留空(部分 GitLab 版本默认永不过期,管理员可覆盖)。
  6. 点击 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 pushgit 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 使用体验的基本功,仅需四步:

  1. 生成密钥对:ssh-keygen
  2. 复制公钥:cat ~/.ssh/id_rsa.pub
  3. 添加到 GitLab:Settings → SSH Keys
  4. 测试连接:ssh -T git@gitlab.com

一次配置,长期受益。花 5 分钟切换到 SSH,告别重复输入密码的烦恼。

📌 拓展阅读:


相关推荐
志栋智能2 小时前
超自动化运维如何重塑IT组织的核心竞争力?
运维·服务器·网络·数据库·人工智能·自动化
@insist1232 小时前
网络工程师-交换机核心配置完全指南
运维·服务器·网络·网络工程师·软考·软件水平考试
rabbit_pro2 小时前
IDEA保存SSH会话信息
java·ssh·intellij-idea
ん贤2 小时前
手敲Linux命令
linux·运维·服务器
Drache_long2 小时前
Docker(一)
运维·docker·容器
爱学习的小囧2 小时前
SXi LAG 链路聚合负载均衡配置全教程 | LACP 协议 + 交换机联动,新手也能落地
运维·服务器·php·负载均衡·esxi
尽兴-2 小时前
Dubbo 负载均衡原理与服务调用全解析
运维·负载均衡·dubbo·轮询算法·一致性哈希·平滑加权轮询·随机算法
花间相见2 小时前
【Linux进阶01】—— tmux原理与实战教程
linux·运维·服务器
jinanwuhuaguo2 小时前
Ollama 全方位深度剖析:大模型时代的“Docker化”革命、算力普惠基础设施与安全边界重构
运维·开发语言·人工智能·深度学习·安全·docker·重构