场景

当有多个 git 账号时,就比如

主账户:用于个人项目开发

子账户:比如拿来存存 imgStaticFile 然后用 jsd 加速 等..

又或者 gitlab

问题

多个 Git 账号,但是邮箱不同,且只有一个 id_rsa_pub 公钥,无法绑定多个github账户,这样就会导致有一个账户用不了,当然你可以选择Https,但这将会是繁琐的过程

解决

生成多个不同的公私密钥对,从 config 文件管理它们

  1. 查看已有的 密钥,输入以下命令

    1
    ls ~/.ssh/

    可以看到id_rsaid_rsa_pub,其中 id_rsa 是私钥 id_rsa_pub 是公钥

  2. 生成新的公钥,并命名为 id_rsa_pub2(随便命名,也可以 id_rsa_pub_github用户名,这样就好区分开)输入以下命令

    1
    ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C "yourmail@xxx.com"

    按三下回车之后就可以发现 .ssh 目录下有我们刚刚生成的 id_rsa_2.pub,复制 id_rsa_2.pub 内容到 github 子账户进行绑定

  3. .ssh 文件夹下新建 config 文件并编辑

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 默认账户                                                                       
    Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

    # 子账户1
    Host xiaojia.github.com # Host实际映射到HostName,但密钥文件不同,可自定义
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa2 # <-- 注意这里,修改成你自己自定义的名字

    # 子账户2
    ...
  4. 测试 ssh连接是否成功,输入以下命令

    1
    2
    ssh -T git@github.com
    ssh -T git@xiaojia.github.com

    Hi xiaojia! You’ve successfully authenticated, but GitHub does not provide shell access.

    出现以上这句话,表示连接成功

  5. 接着要注意的地方,也就是 clone 子账户时要注意,原本 clone 的方式是这样的

    git clone git@github.com:xxx/xxx.git

    现在改为 git clone git@xiaojia.github.com:xxx/xxx.git,对应你config文件里的Host

    那么问题又来了,git 的用户名和邮箱我配置了全局咋办

    这好办,直接取消全局,然后进入项目里面进行单独设置

    1
    2
    3
    # 取消用户名和邮箱全局配置
    git config --global --unset user.name
    git config --global --unset user.email
  6. cd 项目

    1
    2
    3
    # 单独配置用户名和邮箱
    git config user.name "xxx"
    git config user.email "xxx@xxx.com"
  7. 最后直接 push

    1
    git push -u origin master

    大功告成😁

存在问题

如果已存在的项目发现 push 不上去,那么执行如下命令,如没问题,请忽略!

1
2
git remote rm origin
git remote add origin git@xiaojia.github.com:xxx

其实也就是重新关联远程仓库