git公钥配置的核心只有一句话:本地生成一对 SSH 密钥,把公钥填进 GitHub、GitLab 或 Gitee,私钥留在自己电脑,再用 ssh -T 验证。 做完这一步,克隆和推送就能少输密码。
配置前先分清公钥和私钥
公钥可以公开,私钥绝对不能外发
文件名怎么分辨
.pub结尾的是公钥,id_ed25519.pub,用来交给代码平台。- 不带
.pub的是私钥,id_ed25519,只能留在本机。 - Linux 和 Mac 下,私钥权限建议设为
600,避免 SSH 直接拒绝使用。
一把公钥能配多个平台吗
可以,同一份公钥可以添加到 GitHub、GitLab、Gitee 等不同平台,但要注意,同一个平台里,同一公钥通常只能绑定一个账号,团队项目更推荐用 Deploy Key,而不是把个人密钥复制到服务器,据 GitHub 官方文档,SSH Key 用于免密认证;OpenSSH 手册也长期建议优先使用 Ed25519 这类现代算法。
GitHub git公钥配置步骤:从生成到验证
先看有没有旧密钥
打开终端,执行:
ls -al ~/.ssh
如果已经有 id_ed25519.pub,可以直接复制使用,没有就重新生成,不要随便覆盖旧密钥,否则可能影响正在用的仓库。
生成新密钥
ssh-keygen -t ed25519 -C "你的邮箱"
一路回车即可,想自定义路径,可以在提示时输入,系统会问是否设置 passphrase,设置了更安全,但每次使用可能提示输入。
启动 SSH agent:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519
复制公钥并添加到平台
Windows 用 Git Bash:
clip < ~/.ssh/id_ed25519.pub
Mac:
pbcopy < ~/.ssh/id_ed25519.pub
Linux:
cat ~/.ssh/id_ed25519.pub
GitHub 路径是:Settings -> SSH and GPG keys -> New SSH key,标题随意写,Key 内容粘贴

.pub 文件里的全部文本,GitLab、Gitee 的入口类似,一般在 SSH Keys 或公钥管理页面。
验证连接
ssh -T git@github.com
第一次连接会问是否继续,输入 yes,看到 successfully authenticated 就说明配置通了。
然后检查 remote 地址:
git remote -v
如果是 https://github.com/...,改成 SSH:
git remote set-url origin git@github.com:用户名/仓库.git
Windows和Mac git公钥配置区别:路径、命令和权限
| 项目 | Windows | Mac/Linux |
|---|---|---|
| 默认路径 | C:Users用户名.ssh |
~/.ssh |
| 复制公钥 | clip < 文件 |
pbcopy 或 cat |
| 权限处理 | 一般由 OpenSSH 检查 | 常用 chmod 调整 |
| agent | Git Bash 里用 eval |
通常随系统启动 |
Windows 建议用 Git Bash 操作,路径写成 /c/Users/用户名/.ssh 更顺手,Mac 如果频繁提示 passphrase,可以启用钥匙串:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
再在 ~/.ssh/config 里写:
Host github.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519
服务器上git公钥配置怎么操作:部署密钥与已知主机
服务器拉私有仓库,不建议把个人私钥传上去,更稳的做法是生成部署密钥:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_deploy -C "deploy@server" cat ~/.ssh/id_ed25519_deploy.pub
把公钥添加到项目里的 Settings -> Deploy keys,只给这个项目权限,默认只读,需要推送再勾选写入。
写入 known_hosts:
ssh-keyscan github.com >> ~/.ssh/known_hosts

配置 ~/.ssh/config:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_deploy IdentitiesOnly yes
测试并克隆:
ssh -T git@github.com git clone git@github.com:组织/仓库.git
业内专家指出,生产服务器更适合 Deploy Key,而不是个人账号密钥,这样权限边界清楚,人员变动时也容易回收。
git公钥配置完了为什么还要输入密码:常见原因与排查
加载的密钥不对
ssh-add -l ssh -vT git@github.com
-v 会显示实际使用了哪个私钥,没加载就执行 ssh-add。
remote 还是 HTTPS
git remote -v
显示 https://github.com/... 就不是 SSH,改成:
git remote set-url origin git@github.com:用户名/仓库.git
私钥权限或 passphrase 影响
Linux、Mac 下执行:
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub
如果设置了 passphrase,提示输入属于正常,多个密钥冲突时,在 config 里写清 IdentityFile 和 IdentitiesOnly yes。
git公钥配置国内网络失败怎么办?端口与代理思路
国内网络访问 github.com 的 22 端口,有时会超时,GitHub 官方支持 SSH over HTTPS,也就是走 443 端口。
先测试:
ssh -T -p 443 git@ssh.github.com
能通就写入 config:
Host github.com HostName ssh.github.com Port 443 User git
也可以走本地代理:
Host github.com ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p
Windows 如果没有 nc,可以用 Git 自带代理配置,或安装 connect 工具,较大比例的连接失败来自端口封锁、DNS 解析异常或代理没走对,先换 443,再查代理和 DNS。
一台电脑管理多个代码平台:git公钥配置与多账号

为不同平台生成不同密钥
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "github" ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_gitlab -C "gitlab"
config 示例:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github IdentitiesOnly yes Host gitlab.com HostName gitlab.com User git IdentityFile ~/.ssh/id_ed25519_gitlab IdentitiesOnly yes
远程地址要匹配 Host,如果你写成 Host github-work,remote 也要用 github-work:组织/仓库.git。
企业团队里的权限习惯
- 个人电脑用个人密钥。
- 服务器用 Deploy Key。
- CI/CD 用项目级 SSH Key,别复用开发者私钥。
- 离职或轮换时删除旧公钥。
行业共识认为,密钥生命周期管理比一次配置更重要,配好只是开始,管好权限才能少出事。
git公钥配置并不复杂:生成密钥、上传公钥、验证连接、固定 remote。 把这四步做成清单,Windows、Mac 和服务器场景都能少踩坑。
git公钥配置常见问题Q&A
git公钥配置后克隆仓库仍然提示 Permission denied 怎么办?
先看公钥有没有加到当前账号或项目,再跑 ssh -T git@github.com,返回用户名是否正确,最后查 ssh-add -l、私钥权限、remote 是否 SSH 地址,多账号时检查 ~/.ssh/config 的 Host 与 remote 是否一致。
git公钥配置需要每次换电脑都重新生成吗?
推荐新电脑重新生成一对密钥,只把公钥加到平台,私钥不复制,复制私钥虽然能立刻用,但泄露风险高,也不利于设备级撤销,事实是:平台只认公钥,私钥始终留在生成它的设备上最稳妥。
git公钥配置和 HTTPS 加 Token 有什么区别?
SSH 用密钥对,HTTPS 用账号 Token,SSH 适合频繁推送,认证链路轻;HTTPS 更容易穿过企业防火墙和代理,两者都能拉私有仓库,选择取决于网络环境和团队规范,事实是:GitHub 已不再支持密码推送,HTTPS 必须用 Token,SSH 则依赖公钥。
