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

解决:
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 文件中区分:
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,从此提交一路畅通。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/662545.html

