git-不同git仓库配置不同ssh秘钥
0.背景
本文介绍,当使用多个git仓库时:
- 如何生成及配置秘钥
- 如何为不同的仓库配置不同的秘钥
1.ssh秘钥对生成
# 进入ssh秘钥文件存储位置
# linux下默认存储在: ~/.ssh win下默认存储在: C:\Users\用户名\.ssh
cd Users\用户名\.ssh
# 生成ssh秘钥
# 替换bitbucket_ed25519为自己的秘钥文件名(自定义)
ssh-keygen -t ed25519 -f bitbucket_ed25519
一路回车即可

然后,在.ssh目录下就能看到刚才生成的秘钥对。

2.仓库配置ssh公钥
一般在仓库的头像下有全局设置,此处以gitee为例。

录入刚才生成的公钥值,备注自定义。

账户配置好公钥后,可以输入下列命令测试连接情况。
# -vvv常用于查看详细信息
# 替换你的私钥路径
ssh -vvv -T git@gitee.com -i C:\Users\yang37\.ssh\id_ed25519

3.xx域名使用xx秘钥
本地电脑使用到多个代码仓库时,例如gitee、github等等
在.ssh目录下新建config文件(无后缀名)。

编辑此配置文件:
Host: 别名(可自定义,建议用仓库域名方便记忆)。
HostName: 实际仓库服务器地址。
User: Git 服务器用户名(通常是 git)。
Port: SSH 端口(默认是22,根据实际情况修改)。
IdentityFile: 私钥路径(注意是私钥不是公钥)。
IdentitiesOnly yes: 强制只使用指定的密钥,不尝试其他密钥。
示例:
Host gitee.com
HostName gitee.com
User git
IdentityFile C:\Users\yang37\.ssh\id_ed25519
IdentitiesOnly yes
SetEnv GIT_AUTHOR_NAME="yang37"
SetEnv GIT_AUTHOR_EMAIL="yang37z@qq.com"
SetEnv GIT_COMMITTER_NAME="yang37"
SetEnv GIT_COMMITTER_EMAIL="yang37z@qq.com"
又比如同一平台下使用多个账号:
# === GitHub 主账号 ===
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_main
IdentitiesOnly yes
# === GitHub 次账号(别名访问)===
Host github-alt
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_alt
IdentitiesOnly yes
可以用之前的测试命令进行验证,如果返回了绑定账号的欢迎信息,就说明配置和密钥绑定正确。
# @这里可以替换为别名,例如上方的@github-alt
ssh -T git@gitee.com

4.扩展
4.1 基本原理
基于非对称秘钥算法:
| 类型 | 存放位置(默认) | 说明 |
|---|---|---|
| 私钥 | ~/.ssh/id_rsa | 不能泄露,本地保存 |
| 公钥 | ~/.ssh/id_rsa.pub | 提交给 Git 服务器验证身份 |
- 私钥加签、公钥验签。
- 公钥加密、私钥解密。
鉴权原理,简化逻辑如下:
- Git仓库把一个加密 challenge 发给客户端(公钥加密)
- 客户端用私钥解密并回应
- Git仓库验证响应是否正确
- 正确:密钥持有者 → 身份认证通过
4.2 命令行验证成功但是拉取还是弹登录窗
注意选择SSH方式拉取,而非HTTPS(Git 试图用 HTTPS 方式连接 Gitee,触发了凭据弹窗(用户名/密码或 token))。


浙公网安备 33010602011771号