最近遇到这样的需求,需要在一台电脑上同时使用两个 github
账号,负责不同的用途,比如:一个用来写个人项目,一个用来写公司的项目。
配置
注册两个 git 账号
选择一个平台注册两个账号即可。
取消全局设置的用户名和邮箱
1
2
3
| // 取消全局用户名和邮箱
$ git config --global --unset user.name
$ git config --global --unset user.email
|
SSH 配置
生成私钥和公钥
如果用户家目录下没有 .ssh
目录,请自行创建
由于我注册多家平台的 git
账号,所以对其进行了一个文件目录分类
1
2
3
4
5
6
7
| $ mkdir -pv ~/.ssh/github # gitee|coding|bitbucket|gitlab
$ ssh-keygen -t rsa -C "myfirst@gmail.com" # 在回车提示中输入完整路径,如:/path/to/user/.ssh/github/id_myfirst_rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/path/to/user/.ssh/id_rsa):/path/to/user/.ssh/github/id_myfirst_rsa
$ ssh-keygen -t rsa -C "mysecond@gmail.com" # 在回车提示中输入完整路径,如:/path/to/user/.ssh/github/id_mysecond_rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/path/to/user/.ssh/id_rsa):/path/to/user/.ssh/github/id_mysecond_rsa
|
分别配置两个账号的 SSH and GPG keys
在 Settings
控制面板中找到 SSH and GPG keys
,点击 New SSH Key
进行添加,Title
请自行决定。

将密钥添加到 ssh-agent 的会话中
如果执行 ssh-add
时显示错误 Could not open a connection to your authentication agent.
那么执行 eval ssh-agent -s
。
1
2
3
4
| $ ssh-add -K ~/.ssh/github/id_myfirst_rsa
Identity added: /path/to/.ssh/github/id_myfirst_rsa (/path/to/.ssh/github/id_myfirst_rsa)
$ ssh-add -K ~/.ssh/github/id_mysecond_rsa
Identity added: /path/to/.ssh/github/id_mysecond_rsa (/path/to/.ssh/github/id_mysecond_rsa)
|
查看 ssh key 的设置
1
2
3
| $ ssh-add -l
2048 SHA256:ai3jRoAfkqgB2LYtJuQR8QZN1F5XXXXXXXXXXXXXXXX /path/to/.ssh/github/id_myfirst_rsa (RSA)
2048 SHA256:AL2jRoAfkqgB2LYtJuQR8QZN1F5XXXXXXXXXXXXXXXX /path/to/.ssh/github/id_mysecond_rsa (RSA)
|
修改 ssh config 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $ vim ~/.ssh/config
Host *
KexAlgorithms +diffie-hellman-group1-sha1
# default: myfirst
Host github.com
HostName github.com
User myfirst
PreferredAuthentications publickey
IdentityFile ~/.ssh/github/id_myfirst_rsa
# mysecond
Host mysecond.github.com
HostName github.com
User mysecond
PreferredAuthentications publickey
IdentityFile ~/.ssh/github/id_mysecond_rsa
|
测试连通性
mysecond.github.com
需要配置 GitHub
的 Host
。
1
2
3
4
5
6
7
| // 测试默认用户 myfirst 的连接性
$ ssh -T git@github.com
Hi myfirst! You\'ve successfully authenticated, but GitHub does not provide shell access.
// 测试另一个用户 mysecond 的连接性
$ ssh -T git@mysecond.github.com
Hi mysecond! You\'ve successfully authenticated, but GitHub does not provide shell access.
|
项目测试
创建两个项目目录
1
| $ cd ~/ && mkdir -pv {a,b}
|
初始化项目 a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $ cd ~/a
$ git init
$ echo "myfirst" > README.md
$ git add README.md
$ git config user.name "myfirst"
$ git config user.email "myfirst@gmail.com"
$ git remote add github git@github.com:myfirst/test.git
$ git push -u github master
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes | 213.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:myfirst/test.git
* [new branch] master -> master
Branch master set up to track remote branch master from github.
|
初始化项目 b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $ cd ~/b
$ git init
$ echo "mysecond" > README.md
$ git add README.md
$ git config user.name "mysecond"
$ git config user.email "mysecond@gmail.com"
$ git remote add github git@mysecond.github.com:mysecond/test.git
$ git push -u github master
Counting objects: 3, done.
Writing objects: 100% (3/3), 218 bytes | 218.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To mysecond.github.com:mysecond/test.git
* [new branch] master -> master
Branch master set up to track remote branch master from github.
|