win7电脑上的git同时使用多个github账户


自己有两个github账户,用途不同,但是需要在同一台机器上使用。查了不少资料,整理如下。

一、需求情况:

自己有两个github账号,准备一个工作用,一个生活用,两者互不干扰。

二、解决思路:

管理两个SSH key。

三、具体方案:

1.生成两个SSH key

为了举例方便,这里使用“life”和“work”两个账户,下同。

1
2
$ ssh-keygen -t rsa -C "life@qq.com"
$ ssh-keygen -t rsa -C "work@qq.com"

不能一路回车,需要在第一个对话的时候输入重命名(id_rsa_life和id_rsa_work)
中间如果选择输入口令life和work,这样会生成:

1
id_rsa_life  id_rsa_life.pub  id_rsa_work  id_rsa_work.pub

两份包含私钥和公钥的4个文件。
注1:ssh-keygen是linux命令,可以让两个机器之间使用ssh而不需要用户名和密码
注2:一定要在~/.ssh路径下运行命令行,不然生成的文件不会出现在当前目录

2.添加私钥

1、打开ssh-agent

(1)如果你是github官方的bash:

1
$ ssh-agent -s

(2) 如果你是其它,比如msysgit:

1
$ eval $(ssh-agent -s)

我的win7是 (2)

2、添加私钥

1
$ ssh-add ~/.ssh/id_rsa_life

如果有口令需要输入设置的口令(life)

1
$ ssh-add ~/.ssh/id_rsa_work

如果有口令需要输入设置的口令(work)

注:ssh-add命令介绍:
ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中
语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
ssh-add [-cDdLlXx] [-t life] [file ...]
ssh-add -s pkcs11
ssh-add -e pkcs11
选项
-D:删除ssh-agent中的所有密钥.
-d:从ssh-agent中的删除密钥
-e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙。
-s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙。
-L:显示ssh-agent中的公钥
-l:显示ssh-agent中的密钥
-t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥
-X:对ssh-agent进行解锁
-x:对ssh-agent进行加锁

3.创建config文件

1
2
3
$ touch config
$ ls
config id_rsa_life id_rsa_life.pub id_rsa_work id_rsa_work.pub

此时会出现空的config文件。
在.ssh目录创建config文本文件并完成相关配置
每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可。
Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:
Host life 这样定义的话,命令如下,即git@后面紧跟的名字改为life
git clone git@life:life/somerepository.git

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
然后添加如下内容:
# life(life@qq.com)
Host life
HostName github.com #这个是真实的域名地址
# 配置登录时用什么权限认证
# 可设为publickey,password publickey,keyboard-interactive等
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_life #这里是id_rsa的地址
User life #配置使用用户名

# work(work@qq.com)
Host work
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_work
User work

4.部署SSH key

分别登陆两个github账号,点击头像,进入Settings –> SSH and GPG keys:
点击”new SSH key”, 把下面两个公钥的内容分别添加到相应的github账号中。

5.远程测试

1
$ ssh –vT git@github.com

我的结果是:

执行测试命令时会自动在.ssh目录生成known_hosts文件把私钥配置进去

6.使用

1、clone到本地

(1)原来的写法:

1
$ git clone git@github.com: life的用户名/learngit.git

(2)现在的写法:

1
2
3
$ git clone git@life.github.com: life的用户名/learngit.git

$ git clone git@work.github.com: work的用户名/learngit.git

2、记得给这个仓库设置局部的用户名和邮箱:
分别进入各自的项目目录中执行

1
2
3
$ git config user.name "life_name" ; git config user.email "life_email"

$ git config user.name "work_name" ; git config user.email "work_email"

3、上述都成功后,会发现钥匙会由灰变绿。

注:查看配置 git config –list 查看全局配置 git config –global –list

出现这个问题

1
2
$ debug1: No more authentication methods to try.
$ Permission denied (publickey).

如果失败就删除重新来过!
history记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
405  eval $(ssh-agent -s)
406 cd ~/
407 rm -r .ssh/
408 mkdir .ssh
409 chmod 700 .ssh/
410 cd .ssh/
411 ssh-keygen -t rsa -C "work@qq.com"
412 ssh-keygen -t rsa -C "life@qq.com"
413 ssh-add -l
414 ssh-add ~/.ssh/id_rsa_life
415 ssh-add ~/.ssh/id_rsa_work
416 ssh-add -l
417 touch config
419 ssh -vT git@github.com
420 cd /c/work/blog
421 hexo d --debug
422 history 100

OK!
参考:电脑上的git同时使用两个github账户

后续提交文档时,出现两个权限错误问题。

解决方案:解决 github push failed 用户权限问题

-------------本文结束感谢您的阅读-------------