一台电脑 配置多个GitHub账号

假设配置的两个GitHub账号分别为remmeiko和Mikasa

操作环境:Windows

0x01.生成密钥

每一个GitHub账号可以有多个ssh key,但是一个ssh key只能用于一个GitHub账号,所以需要为每个GitHub账号生成对应的ssh key

1.生成第一个账号rem的密钥

1
ssh-keygen -t rsa -C “邮箱1”

此处虽然没有加-f参数,但执行时自动选择路径并命名(会向你确认一下路径)

  • 执行完后会在【C:\Users\用户\ .ssh】路径生成id_rsa(密钥)和id_rsa.pub(公钥)两个文件

2.生成第二个账号rem2的密钥

第二个账号一定要重新命名,不然会覆盖掉第一个账号生成的密钥文件,使用-f参数指定文件名字

1
ssh-keygen -t rsa -f "C:\Users\用户\.ssh/rsa_2" -C “邮箱2”
  • 执行完会生成id_rsa_2(密钥)和id_rsa_2.pub(公钥)两个文件

ssh-keygen命令参数说明

  • -t(type):指定要生成的密钥类型,有rsa1(SSH1),dsa(SSH2),ecdsa(SSH2),rsa(SSH2)等类型,较为常用的是rsa类型
  • -C comment:提供一个新的注释
  • -b bits:指定要生成的密钥长度 (单位:bit),对于RSA类型的密钥,最小长度768bits,默认长度为2048bits。DSA密钥必须是1024bits
  • -f filename:指定生成的密钥文件名字

0x02 将密钥添加至对应的GitHub账号

  • 登录GitHub账号,找到在头像下方setting

  • 其他如下图操作即可(从左至右)

    GitHub添加密钥

0x03 编辑配置文件

  • 先确认.ssh文件夹中是否存在config文件,没有则创建一个(无文件后缀)
  • 编辑如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Host:主机别名
# HostName:github服务器地址
# User:GitHub服务器用户名
# IdentityFile:和GitHub服务器通信的ssh私钥
# 通过IdentityFile可以区分不同的账号

# 账号1的邮箱
Host github_remmeiko
HostName github.com
User git
IdentityFile C:/Users/用户名/.ssh/id_rsa

# 账号2的邮箱
Host github_Mikasa # 前缀名可以任意设置
HostName github.com
User git
IdentityFile C:/Users/用户名/.ssh/id_rsa_2

Host修改自己能够识别的名称即可

HostName设置为github.com和ssd.github.com都可以

IdentityFile为密钥所在的路径(注意寻找自己密钥所在的路径)

ps:如果实在找不到密钥所在路径,推荐下载everything软件查找

Everything软件示例图

  • 上述操作成功之后就可以测试是否配置成功了

    • 终端输入以下命令
    1
    2
    ssh -T git@github_remmeiko
    ssh -T git@github_Mikasa

    说明以下git@github_rememiko:git是config配置中的User用户名,@后面的github_rememiko是config配置中的HostName名字

    • 显示以下内容则表示配置成功了
    1
    Hi rem! You've successfully authenticated, but GitHub does not provide  bash access.

0x04 使用ssh-agent管理密钥

Windwos上使用ssh-agent需要先开启对应的服务

  • 在服务中找到OpenSSH Authentication Agent打开

    image-20210712173419377

1
2
3
4
5
ssh-add C:/Users/用户名/.ssh/id_rsa
ssh-add C:/Users/用户名/.ssh/id_rsa_2
# 后面是生成的密钥
ssh-add -l # 查看ssh-agent管理的密钥
ssh-add -L # 查看ssh-agent管理的公钥

关于ssh-agent详情可参考:ssh转发代理:ssh-agent用法详解

0x05 配置仓库设置

1.删除全局配置

1
2
git config --global --unset 'user.name'
git config --global --unset 'user.email'

2.设置本地配置

1
2
git config user.name `用户名`
git config user.email `邮箱@163.com`

0x06 本地仓库关联远程仓库

1
2
3
# 记住要到对应的本地仓库路径下执行对应的命令
git remote add origin git@github_remmeiko:xxx/xxx.git
git remote add origin git@github_Mikasa:xxx.xxx.git

 命令中后半段xxx/xxx.git就是下图中2标注的信息

0x07 补充说明

  • 关于账号和邮箱的说明

    • 我们一般接触的有两个地方的账号和邮箱,一个是git设置的账号邮箱,一个是GitHub账号对应的账号和邮箱
    • 1)本地git设置账号和邮箱分为系统,全局和本地(local),全局和系统是不随git库改变的,但是也可以为每个仓库设置单独的账号和邮箱。这个账号和邮箱不是作为验证信息,是作为commit提交记录相关信息的标识。

    系统配置是对这台电脑所有用户生效的

    全局配置是对该用户登录下的所有GitHub仓库生效的

    本地(local)配置:也就是为单独仓库进行的配置,只对该仓库生效

    优先级逐渐增加,譬如全局配置的优先级要低于仓库配置,就是说如果仓库和全局都设置了账号和邮箱,那么实际生效是仓库配置设置的账号和邮箱。

    git配置

    • 2)每个GitHub账号在注册时都会有一个对应的账号和邮箱,这个是GitHub的基本信息,说标识也可以,如下图

    GitHub账号配置

    前提说明:git设置的账号和邮箱下文将使用user.name和user.email代替

    • 在本地git设置的user.name和uer.email作为commit记录时的一个标识,用来方便管理,可以清楚的知道是谁提交的。
    • 当你的user.name和user.email和GitHub账号上的name\email一致,你提交修改时,github会自动将这两者关联起来,因此建议git设置的账号邮箱和GitHub账号邮箱一致,(随意填写也是可以的,但如果当两处的账号和邮箱不一致时,就无法进行统计,且头像变灰,而且你也可以改成其他人的账号和邮箱,记录就会显示是别人提交的)

    是否关联

0x08 本地电脑绑定gitee

这里绑定gitee就相当于添加第三个账号,整个过程是一样的,只是有些细节的不同而已

  1. 生成密钥

    1
    ssh-keygen -t rsa -f "C:\Users\31327\.ssh\gitee_id_rsa" -C "3132756780@qq.com"
  2. 将公钥添加至gitee账号之中,和0x02添加至GitHub账号是一样的

  3. 编辑配置文件

    1
    2
    3
    4
    5
    # 3132756780@qq.com
    Host gitee_RemMeiko
    HostName gitee.com
    User gitee
    IdentityFile C:/Users/用户名/.ssh/gitee_id_rsa

    注意修改GitHub为gitee即可

  4. 添加至ssh-agent

    1
    ssh-add C:\Users\31327\.ssh\gitee_id_rsa
  5. 测试连接

    1
    ssh -T gitee@gitee_RemMeiko

参考文章

关于ssh-keygen命令的介绍与用法

如何在一台电脑上设置多个github账号

对Git用户名与Github账户关系的理解