当前位置:首页 > 虚拟主机 > 正文

码云如何配置SSH?码云SSH密钥怎么生成

码云配置 SSH 是安全、高效、免密操作远程仓库的必经之路

对于任何使用 Gitee(码云)进行代码托管的开发者来说,配置 SSH 密钥不仅是为了免去每次推送拉取时输入密码的麻烦,更是提升账户安全等级、保障代码资产不被窃取的关键措施,相比 HTTPS 协议,SSH 协议采用公钥加密与私钥签名机制,私钥仅保存在本地,不会在网络上传输,因此即使服务器被中间人攻破,攻破者也无法杜撰你的身份,本文将从密钥生成、公钥添加、本地验证到多账户隔离,提供一套完整、可落地的配置方案,并附上基于西西云服务器部署的实战经验。

为什么必须配置 SSH 而非继续使用 HTTPS

安全性的本质差异

HTTPS 使用账号密码或访问令牌进行认证,密码一旦在公共网络中被截获,攻破者即可直接接管你的仓库,而 SSH 使用非对称加密算法(RSA/ED25519),私钥长度至少 2048 位,暴力免费在计算上不可行,SSH 还支持 ssh-agent 缓存密钥,避免每次操作都输入口令,安全性更高。

效率与稳定性

  • 免密操作:配置后 git push、git pull 无需再输入用户名密码,适合 CI/CD 自动化流程。
  • 连接稳定:SSH 协议在弱网环境下对断线重传的容错性优于 HTTPS,尤其适合大文件或大量小文件推送。

官方推荐

Gitee 官方文档明确建议开发者使用 SSH 协议,因为它在安全性、权限控制和审计方面更加严谨。

码云 SSH 配置全流程(以 Windows / Linux 为例)

第一步:检查本地是否已有 SSH 密钥

打开终端(Windows 使用 Git Bash 或 PowerShell),执行:

ls -al ~/.ssh

如果存在 id_rsa 和 id_rsa.pub 文件,说明已有密钥,可直接跳到第三步,若没有,则执行第二步。

第二步:生成新的 SSH 密钥

ssh-keygen -t ed25519 -C "你的邮箱@example.com" -f ~/.ssh/gitee_ed25519

  • 推荐使用 ed25519 算法

    ,比 RSA 更短、更快、更安全,如果你的 Git 版本较旧,可以使用 -t rsa -b 4096。

  • 按提示设置密钥保存路径和口令(passphrase),建议设置口令,并妥善保管。
  • 生成后,你会得到两个文件:gitee_ed25519(私钥)和 gitee_ed25519.pub(公钥)。

第三步:将公钥添加到码云账户

  1. 复制公钥内容:cat ~/.ssh/gitee_ed25519.pub
  2. 登录码云,在头像下拉菜单进入 设置 → 安全设置 → SSH 公钥
  3. 将复制的以 ssh-ed25519 开头的完整文本粘贴到“公钥”栏,标题可自由填写(如“工作电脑”),点击确定。
  4. 输入你的账户密码验证后,公钥即添加成功。

第四步:配置 SSH 代理(可选但推荐)

在 ~/.ssh/config 文件中添加以下内容,避免多密钥冲突:

Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/gitee_ed25519 IdentitiesOnly yes

如果是 Windows 系统,注意文件路径需使用 C:Users你的用户名.ssh 的绝对路径或 简写。

第五步:本地验证连接

ssh -T git@gitee.com

首次连接会提示是否确认主机指纹,输入 yes 回车,如果看到 “Hi 你的用户名! You’ve successfully authenticated, but GITEE.COM does not provide shell access.”,说明配置成功。

常见错误排查与解决方案

错误 1:Permission denied (publickey)

  • 原因:公钥未正确添加,或私钥路径未被识别。
  • 解决:重新执行 ssh -T git@gitee.com,加上 -v 参数查看详细日志;确认 config 文件中 IdentityFile 路径是否正确;检查私钥权限(Linux/macOS 下需为 600,Windows 下禁止其他用户访问)。

错误 2:sign_and_send_pubkey: signing failed: agent refused operation

  • 原因:ssh-agent 未加载私钥。
  • 码云如何配置SSH?码云SSH密钥怎么生成 第1张

    解决:

    eval "$(ssh-agent -s)" ssh-add ~/.ssh/gitee_ed25519

错误 3:clone 时提示 remote: HTTP Basic: Access denied

  • 原因:本地 Git 缓存了旧的 HTTPS 凭据。
  • 解决:在项目目录内修改远程地址为 SSH 格式: git remote set-url origin git@gitee.com:你的用户名/仓库名.git

西西云实战经验:从开发机到服务器的 SSH 无缝迁移

我们在西西云上部署了一台 2C4G 的云服务器,用于运行自动化构建脚本,最初直接使用 HTTPS + 访问令牌的方式,但后续发现两个痛点:令牌有效期短需频繁更新,且构建日志中极易泄露令牌内容,后来采用如下方案彻底解决:

  • 在西西云服务器上生成独立的 SSH 密钥对,将公钥添加到码云仓库的部署公钥(不同于账户公钥,仅限单个仓库只读权限)。
  • 在服务器的 ~/.ssh/config 中指定 Host 为 gitee.com,并设置 IdentityFile 指向该独立密钥。
  • 配合西西云的安全组策略,仅允许服务器 IP 访问码云的 22 端口,实现最小化暴露。

这样,构建服务器可以免密拉取代码,同时因为私钥只存于服务器内,即使开发机丢失,也不会影响生产环境,这个案例说明:SSH 配置并不是一次性的,而是需要根据使用场景做权限隔离,账户公钥用于日常开发,部署公钥用于服务器只读拉取,两者互不干扰,安全等级更高。

多账户与多平台管理的高级技巧

如果你同时使用 GitHub、GitLab 和码云,且需要不同的密钥,务必在 config 文件中区分:

码云如何配置SSH?码云SSH密钥怎么生成 第2张

Host github.com HostName github.com User git IdentityFile ~/.ssh/github_rsa Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/gitee_ed25519

并使用 git config --global user.name 和 user.email 分别设置不同平台的提交身份,这样可以避免“一个密钥走天下”带来的越权风险。

安全意识与日常维护

  • 私钥永不公开:不要将私钥上传到任何云端存储、代码仓库或聊天工具。
  • 定期轮换密钥:建议每 6 个月更换一次公钥,并删除旧公钥。
  • 使用口令保护:如果私钥未设置 passphrase,一旦泄露将完全被滥用,建议配合 ssh-agent 使用,只需在会话中输入一次口令。
  • 验证码云主机指纹:首次连接时务必比对 Gitee 官方公布的指纹,防止 DNS 截持。

相关问答

问:我在码云上添加了 SSH 公钥,但执行 git clone 时仍然要求输入密码,怎么回事?

答:检查你复制的远程地址是否以 git@gitee.com 开头,而不是 https://gitee.com,如果地址没问题,再执行 ssh -T git@gitee.com 验证认证是否通过,如果认证通过但 clone 仍要密码,可能是本地 Git 配置了全局代理或环境变量干扰,可尝试 unset http_proxy https_proxy 后重试,确认你的公钥是添加在“账户 SSH 公钥”而不是“仓库部署公钥”,账户公钥对所有仓库生效,而部署公钥只对特定仓库生效。

问:我有多台电脑,能否同时使用同一个 SSH 密钥?

答:可以,但不建议,将同一份私钥复制到多台机器会扩大泄露面,一旦一台机器被入侵,所有使用该密钥的仓库都会失守,更安全的做法是每台设备生成独立的密钥对,分别添加到码云账户的 SSH 公钥列表中,你可以给每把公钥设置不同的标题(如“办公室电脑”“家用笔记本”),方便日后在码云后台管理或删除,如果确实需要临时使用,建议用 ssh-keygen -p 修改私钥口令,并确保设备安全。


如果你在配置过程中遇到任何问题,欢迎在评论区留言,我会第一时间为你解答,你的配置经验也可以分享出来,帮助更多开发者少走弯路。码云配好 SSH,从此提交一路畅通

码云如何配置SSH?码云SSH密钥怎么生成 第3张

0