多 Git 账号管理解决方案,SSH 密钥配置实战技巧(附详细图文教程)_git 多密钥
🚀 为什么需要多 Git 账号管理?
作为一名开发者,我们常常在 Git 平台上托管个人项目。例如,我在 GitHub 上维护着一些开源项目,同时也会在 GitCode 上参与一些开源社区的协作。由于这些平台不同,我需要在本地管理多个 Git 平台的 SSH 密钥。起初,我直接使用默认的平台 SSH 密钥,但因为不同平台的密钥会频繁覆盖,每次推送代码时总是遇到权限错误。为了应对这种问题,我只能手动频繁切换账号。
经过一段时间的摸索,我总结出了一种通过配置多个 SSH 密钥来管理不同账号的方法,解决了每次切换账号的麻烦。下面就把这些实战技巧分享给大家。
本文以 GitHub + GitCode 场景演示:通过不同 SSH 密钥区分两个账号,实现免密推送远程 Git 仓库。
🔑 二、生成多 Git 平台 SSH 密钥
2.1 配置 GitCode 平台 SSH 密钥
2.1.1 生成 SSH 密钥
-
打开命令行终端,输入以下命令在指定目录生成密钥文件:
ssh-keygen -t rsa -b 4096 -C \"your_email@example.com\" -f ~/.ssh/<平台名称>_id_rsa
-t rsa
:指定密钥使用 RSA 算法-b 4096
:表示生成 4096 位的密钥-C \"your_email@example.com\"
:添加注释,用于标识密钥,通常使用邮箱地址-f ~/.ssh/_id_rsa
:自定义密钥保存路径和文件名,用于 Git 通过文件名区分不同平台的密钥,例如~/.ssh/gitcode_id_rsa
-
接下来,系统会提示设置密钥密码(可选但推荐):
Enter passphrase for \"/c/Users/Jie/.ssh/gitcode_id_rsa\" (empty for no passphrase):Enter same passphrase again:
- 设置密码后,每次使用 SSH 密钥时都需要输入该密码,可以防止私钥被未经授权的人使用。
- 如果不需要密码,直接按 Enter 键跳过。
-
操作成功后,终端将输出以下内容:
Your identification has been saved in /Users/.ssh/gitcode_id_rsaYour public key has been saved in /Users/.ssh/gitcode_id_rsa.pubThe key fingerprint is:SHA256:Ub+LOdZzqYTdq5t+mDAErdkTtzUbnB8VPXJs/cTBDPA your_email@example.comThe key\'s randomart image is:+---[RSA 4096]----+| +o. || =.oo E.. ||o +o. .o. ||o* . .. . ||*+= o.+ S ||O+=o+o + ||*= o *o ||o.o . oo .. ||o o+=o.. |+----[SHA256]-----+
-
在
~/.ssh/
目录可以看到生成的密钥文件:- 私钥:
gitcode_id_rsa
(不公开) - 公钥:
gitcode_id_rsa.pub
(需添加到 GitCode)
- 私钥:
2.1.2 添加 SSH 公钥到 GitCode
-
执行以下命令或者手动复制 SSH 公钥文件
gitcode_id_rsa.pub
的内容:cat ~/.ssh/gitcode_id_rsa.pub | clip
注:如果手动复制公共 SSH 密钥,请确保复制了整个密钥,以
ssh-rsa
开头,并以电子邮件地址结尾。 -
登录 GitCode 平台,进入「个人设置」->「安全设置」->「SSH 公钥」:
-
点击「+ SSH 公钥」:
- 在「公钥名称」一栏中,为公钥添加一个描述性名称
- 将复制的公钥内容粘贴到「公钥」文本框中
- 点击「新建」完成操作
2.2 配置 GitHub 平台 SSH 密钥
2.2.1 生成 SSH 密钥
-
同理,在终端执行以下命令生成 GitHub 密钥:
ssh-keygen -t rsa -b 4096 -C \"1500492856@qq.com\" -f ~/.ssh/github_id_rsa
-
在
~/.ssh/
目录可以看到生成的密钥文件:- 私钥:
github_id_rsa
(不公开) - 公钥:
github_id_rsa.pub
(需添加到 GitHub)
- 私钥:
2.2.2 添加公钥到 GitHub
-
登录 GitHub,进入 Settings → SSH and GPG Keys:
-
点击「New SSH key」新建密钥,粘贴 github_id_rsa.pub 内容并保存:
⚙️ 三、关键!编写 config 配置文件(核心区分逻辑)
-
在
C:\\Users\\\\.ssh
目录打开config
文件(无扩展名),如果文件不存在,可以手动创建一个。 -
按以下格式编写 Git 平台的配置,指定对应的私钥文件:
# ------------------------ GitHub 配置 ------------------------Host github.com HostName github.com # 实际主机名(不变) PreferredAuthentications publickey IdentityFile ~/.ssh/github_id_rsa # 指向GitHub私钥文件
-
Host:自定义识别符(可理解为 “别名”,用于区分不同账号),通常与平台域名一致。
-
HostName:目标平台的真实域名(如gitlab.com/github.com/gitcode.com),用于建立 SSH 连接。
-
IdentityFile:指定当前平台对应的私钥文件路径(与生成的密钥文件名一致),是实现多账号区分的核心配置。
-
-
将编写完成后的配置添加到
config
文件,以下是一个示例配置:# ------------------------ GitHub 配置 ------------------------Host github.com HostName github.com # 实际主机名(不变) PreferredAuthentications publickey IdentityFile ~/.ssh/github_id_rsa # 指向GitHub私钥# ------------------------ GitCode 配置 ------------------------Host gitcode.com HostName gitcode.com PreferredAuthentications publickey IdentityFile ~/.ssh/gitcode_id_rsa # 指向GitCode私钥
🔍 四、验证连接是否成功
4.1 测试 GitHub 连接
-
通过以下命令测试 SSH 连接 GitHub:
ssh -T git@github.com
-
如果是第一次连接,SSH 客户端会提示你确认 GitHub 服务器的身份:
The authenticity of host \'github.com (20.205.243.166)\' can\'t be established.ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.This key is not known by any other names.Are you sure you want to continue connecting (yes/no/[fingerprint])?
-
如果你信任 GitHub 服务器,可以输入
yes
来继续连接:Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-
在终端看到以下内容,则表示 SSH 密钥已被正确认证,成功连接到 GitHub:
Hi ShiJieCloud! You\'ve successfully authenticated, but GitHub does not provide shell access.
-
接下来我们就可以正常进行克隆、推送、拉取代码等操作了。
4.2 测试 GitCode 连接
-
同理,使用以下命令测试连接:
ssh -T git@gitcode.com
-
成功连接后会在终端看到以下内容:
remote: Welcome to GitCode, @username
💡 五、仓库级个性化配置(可选)
默认情况下,Git 会使用全局的用户名和邮箱进行身份验证和提交。但是,如果希望为不同的仓库使用不同的用户名/邮箱,可以通过以下方法来配置每个仓库的用户名和邮箱,而不是仅依赖全局设置。
5.1 设置全局用户名和邮箱(适用于所有仓库)
通过以下命令设置全局的用户名和邮箱,这会在所有仓库中使用相同的用户名和邮箱:
git config --global user.name \"Your Name\"git config --global user.email \"your_email@example.com\"
5.2 为特定仓库设置用户名和邮箱
在指定项目仓库的目录下通过以下命令来设置仓库级别的用户名和邮箱,这只会影响当前仓库,不会更改全局配置:
# 进入项目目录cd path/to/your/repogit config user.name \"Other Name\"git config user.email \"other_email@example.com\"
这样设置后,每个仓库将使用独立的用户名和邮箱配置,避免因全局配置导致的账号混淆问题。