前言
本人搞了两个 GitHub 账号,一个用来正常的和别人合作项目,另一个用来自己写一些代码,希望能做到两个本地账户和远程账号都完全隔离,没有联系,也不会被混淆使用。
但是这样就会有一个问题,设置本地用户 user.email
时候,如果两个 GitHub
账号仓库使用同一个本地用户, GitHub
会将本地的用户自动与相应的 GitHub
账号关联起来,这样在 commit
记录里面就能看到是谁提交的了,这是我不想看到的结果。
最开始以为只要把同一个 SSH
公钥分别添加到两个 GitHub
账户,再在不同的仓库设置不同的 user.name
和 user email
就 OK 了. 并不行,每个公钥只能用一次。然后就考虑生成两个密钥,分别添加到不同的账户,但是电脑在连接远程仓库时,只能默认选择其中固定的一个来连接,并不会根据不同仓库的设置选择不同的密钥,结果就是还是只能免密连接一个 GitHub
账户的仓库。
你所使用的 SSH
密钥决定了你是否有权限访问某一个 GitHub
账号下面的仓库,而你本地仓库设置的 use email
决定了在 GitHub
的 commit
记录中的用户,而一般在没有进行以下配置的情况下,你的电脑只会默认使用一个 SSH
密钥进行连接,这就导致了你只能访问一个 GitHub
账号。
如果访问另一个 Github
账户,在 push
时就会报如下错误:

下面将详细介绍方法:
假设现有两个账号分别如下: 一个账号名为 99Young99
、另一个为 CS-Research-alliance


注: 这里举例实现在相同的平台 Github 不同账号使用不同的 SSH,也可以用相同的方法,在不同的平台使用不同的 SSH
1. 生成密钥
首先是先生成两个 SSH
密钥,对应两个身份(假设为 99Young99
和 CS-Research-alliance
)。
1.1 检查是否已经有 SSH-Key
打开 Git bash
(Linux 中需要打开 Shell),进入 ~/.ssh
目录,通过命令看看电脑上有 SSH-Key
的相关文件没!
cd ~/.ssh
ls
如果显示 id_rsa
和 id_rsa.pub
文件,说明已经有 SSH Key
了。如果没有,那么根据下面步骤 生成一个!
1.2 生成一个(或多个)SSH-Key
生成一个 Github
用的 SSH-Key
,其中 github_id_rsa
为密钥的文件名,~/.ssh/github_id_rsa
为密钥目录位置:
ssh-keygen -t rsa -C "youremail@example.com" -f ~/.ssh/github_id_rsa
利用上述命令,生成了一对秘钥 github_id_rsa
和 github_id_rsa.pub
, 保存在了 ~/.ssh
文件夹内。

生成另一个 SSH-Key
,其中 Othergithub_id_rsa
为密钥的文件名,~/.ssh/Othergithub_id_rsa
为密钥目录位置:
ssh-keygen -t rsa -C "private_email@example.com" -f ~/.ssh/Othergithub_id_rsa
这时候要特别注意 -f ~/.ssh/Othergithub_id_rsa
用于重命名,否则会覆盖上面的密钥文件。假设生成了一对新的秘钥 Othergithub_id_rsa
和 Othergithub_id_rsa.pub
。
然后分别将这两对密钥加入到对应的 GitHub
账户中。
本章产生的两个密钥案例如下:
2. 编辑配置文件
编辑 ~/.ssh/config
文件。如果该文件不存在的话,直接创建一个就好(通过 touch
命令新建 config
文件,并用 vim
编辑器打开 config
文件)。
不同 Host
实际映射到同一 HostName
,但密钥文件不同。Host
前缀可自定义,例子中 99Young99
分步解释
Host 99Young99.github.com (自定义的 Host 简称,以后连接远程服务器就可以用 99Young99.github.com 代替 HostName 的 github.com, 相当于网站的别名,随意取,并且可以去掉 github.com 直接取名为 99Young99.github.com)
Host 远程仓库的地址,注意哦,如果有些服务器做的 ip 端口转发,这里不要带上端口号
Host 99Young99.github.com
HostName (托管网站的域名) 是远程仓库的地址,同样如果做的端口转发也不应带端口号
HostName 主机名可用 ip 也可以是域名(如:github.com或者bitbucket.org)
网上大部分教程的配置文件中 Hostname 都是 github.com,配置成那样可能不能正常 SSH 访问,如果没有成功,改为 ssh.github.com 试一下 (本人没加 ssh 成功了,如下)
HostName github.com
Port 端口号,如果有做转发需要在这里填写端口号,没有就不必要填
Port 服务器 open-ssh 端口 (默认:22,默认时一般不写此行)
Port 8800
PreferredAuthentications publickey
用户
User 登录用户名(如:git) // 即 github 上的用户名
User 99Young99
识别 key 的文件
IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)
IdentityFile ~/.ssh/id_rsa
完整配置
Host 99Young99.github.com
HostName github.com
PreferredAuthentications publickey
User 99Young99
IdentityFile ~/.ssh/id_rsa
配置另一个 Github 账号
都指向同一个平台的话,下面的 Host 需要做个处理,因为我们在用这个 key 的时候根据 Host 从上到下进行查找,不做修改肯定会先查找到第一个 key, 依旧无效,随便改就好了,其他参数不做特殊处理
Host CS-Research-alliance.github.com
HostName github.com
PreferredAuthentications publickey
User CS-Research-alliance
IdentityFile ~/.ssh/github_id_rsa
网上大部分教程的配置文件中 Hostname 都是 github.com,配置成那样是不能正常 SSH 访问的。
(先注意一下: 这里一定是先把两个公钥添加到对应的 GitHub
账户,再进行下面的 ssh
连接测试,否则肯定是连接不上,会显示 permission denied
。)
【第 1步】首先创建 GitHub 账号并登陆,打开 Setting 进行设置,新建 SSH key

【第 2 步】点 New SSH key
后,填上任意 Title
,在 Key
文本框里粘贴id_rsa.pub
文件的所有内容:

【第 3 步】输入密码进行确认,最后就可以看到,SSH key
添加完成


这时候,可以测试一下配置是否成功,测试命令使用别名。例如,对于 GitHub
,本来应该使用的测试命令是:
ssh -T git@github.com
但在 config
文件中,给 GitHub
网站配置的别名就是 CS-Research-alliance.github.com
以及 99Young99.github.com
,所以直接使用别名,就是
ssh -T git@CS-Research-alliance.github.com
ssh -T git@99Young99.github.com
出现如下信息说明配置成功了
Hi CS-Research-alliance! You've successfully authenticated, but GitHub does not provide shell access.
同样的方式就可以配置更多的以 SSH
登录的不同 git
用户。
3. 配置仓库设置
配置仓库是因为这个时候有多个 SSH ,并对应了多个账户,所以每个账户应该在对应仓库配置专属的本地用户名和邮箱,否则默认所有用户均使用的全局用户名和邮箱。
首先要删除 Git
配置的全局用户名和邮件地址,接着在每个项目仓库中按照需求设置不同的 user.name
和 user.email
:
# 查看全局配置
git config --global user.name
git config --global user.email
# 查看本地配置(只能在 git 仓库中使用)
git config --local user.name
git config --local user.email
# 删除全局设置
git config --global --unset user.name
git config --global --unset user.email
# 添加本地设置
# 设置为私有仓库的GitHub账号邮箱和公有账号的GitHub邮箱。
git config --local user.name "个人github账号名"
git config --local user.email "个人github账号邮箱"
对于 Github
为 99Young99
的本地仓库配置如下:
git config --local user.name "99Young99"
git config --local user.email "xxx@qq.com"
对于 Github
为 CS-Research-alliance
的本地仓库配置如下:
git config --local user.name "CS-Research-alliance"
git config --local user.email "xxx@163.com"
如果出现如下报错,是因为必须要进入到 git 仓库才可以正常执行命令
fatal: --local can only be used inside a git repository
这一步以及后面的添加远程仓库,每创建一个新的本地仓库的时候,都需要指定,因为全局配置已经删除了
之后在添加远程仓库的时候,把 github.com
修改成 99Young99.github.com
或者 CS-Research-alliance.github.com
就好了(即上述文件中的 Host
选项),用上面两个 Host
名称来代替原来的 github.com
,(这一步很重要)如:
git remote add origin git@99Young99.github.com:xxx/example.git # 99Young99
git remote add origin git@CS-Research-alliance.github.com:xxx/example.git # CS-Research-alliance.github
其实,上面的配置文件的意思就是,按照设置远程仓库时使用不同的 Host
名称,查找 ~/.ssh/config
文件,使用不同的 SSH
文件连接到 GitHub
。这样你就将是以不同的身份访问 GitHub
仓库。
4. 提交项目到不同的账户
比如提交到 CS-Research-alliance
账户上
初始化本地仓库
git init
连接远程仓库,注意远程仓库的地址,其中 @
后默认为 github.com
,需要改为 ~/.ssh/config
配置 Host
时的别名,如本人的为:CS-Research-alliance.github.com
git remote add origin git@CS-Research-alliance.github.com:CS-Research-alliance/Summer-camp-and-exemption.git # 连接远程仓库
由于 Github
创建分支默认为 main
,所以需要将本地的 master
分支改为 main
分支(先看最后的命令解释,再考虑是否执行此句)
git branch -M main
如果远程仓库有内容,包含 README
文件,需要先执行下述命令
git pull --rebase origin master
提交项目
git add .
git commit -m "任意内容"
-u
表示如果远程没有 master
分支,会创建一个 master
分支,并将项目提交上去,也就不需要将本地的 master
分支改为 main
了,否则执行:git push -u origin main
git push -u origin master
References
[1] 一台电脑双GitHub账户配置
[2] 新手如何配置多个 SSH Key(通俗易懂手把手教学)
[3] 怎么给Git配置多个SSH Key?
[4] 一台电脑绑定两个(或多个)github账号文章来源:https://www.toymoban.com/news/detail-755135.html
[5] 在一台电脑上配置多个github和gitlab账号文章来源地址https://www.toymoban.com/news/detail-755135.html
到了这里,关于一台电脑双 GitHub 账户配置,同时两个 SSH 密钥的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!