加载中...

Github 一机多号配置


0x00 前言

当你有 2 个以上的 Github 账号、每个账号的仓库权限又不同时,就需要用到多账号管理。

首先需要知道的是, Github 支持两种协议同步仓库: HTTPS 和 SSH ,但是只有 SSH 可以实现多账号管理。

下面直接进入主题。

0x10 生成密钥对

首先需要为你每个 Github 账号分别创建一对 SSH 密钥,这里以两个账号为例。

有几个账号、就执行几次这个命令: ssh-keygen -t rsa -b 2048

linux 和 windows 的命令是一样的

命令会问三个问题:

  1. Enter file in which to save the key
  2. Enter passphrase
  3. Enter same passphrase again

第 2 和第 3 个问题是让你设置密钥密码,直接回车跳过就好。

主要是第一个问题,你需要为两个账号的密钥分别指定一个唯一的路径,例如我这里分别设置为:

C:/Users/Administrator/.ssh/id_rsa_one
C:/Users/Administrator/.ssh/id_rsa_two

这样两对密钥就会生成到当前系统用户的 .ssh 目录下:

  • 公钥文件后缀为 .pub
  • 私钥无文件后缀

不要偷懒只生成一对密钥、然后多账号共用密钥,Github 不允许,两个账号没法配置相同的公钥。

0x10 配置 SSH config

在当前系统用户的 .ssh 目录下创建 config 文件,其中添加以下内容:

Host one.github.com
    User ${Github.Account.one.email}
    Hostname ssh.github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_one
    Port 443

Host two.github.com
    User ${Github.Account.two.email}
    Hostname ssh.github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_two
    Port 443

解释一下各个配置项:

  • Host: 自定义的名称,用于关联配置,以后 ssh 连接 Github 时会用到
  • User: 修改为你的 Github 账号的登录邮箱
  • HostName: 固定为 ssh.github.com
  • PreferredAuthentications: 固定为 publickey
  • IdentityFile: 修改为刚刚生成的密钥对的私钥路径
  • Port: 固定为 443

所以只需修改 Host、User、和 IdentityFile 就可以了。

0x20 配置 Github SSH 公钥

登录 Github 每一个账号,分别设置每个账号对应的 SSH 公钥:

  1. 点击右上角头像
  2. 点击 ​Settings
  3. 点击 SSH and GPG keys​
  4. 点击 New SSH Key 按钮
  5. 设置 Title 为前面在 config 文件配置的 Host 名称(不强制,自己能辨认即可)
  6. 设置 Key 的内容为分配给对应账号的公钥 ~/.ssh/id_rsa_*.pub 的内容
  7. 点击 Add SSH Key 按钮提交

0x30 测试 Github SSH 连接

所有账号都配置好后,在本地终端执行命令:

ssh -T git@one.github.com
ssh -T git@two.github.com

其中 one.github.comtwo.github.com 就是前面 config 中指定的 Host 名称。

只要前面配置没问题,就会返回:

Hi xxxxxx! You've successfully authenticated, but GitHub does not provide shell access.

0x40 更新 Git 仓库的远程 URL

在命令行终端中,切换到任意一个 Git 仓库的根目录,执行以下命令修改其远程 URL :

git remote set-url origin ${repo-ssh-url}

其中 ${repo-ssh-url} 可以到该仓库的 Github 页面复制: Code -> SSH -> Copy

例如: git@github.com:lyy289065406/exp-blog.git

复制 URL 后,如果这个仓库是账号 one 才有权限连接的,还需要把 git@github.com 修改为 git@one.github.com,其中 one.github.com 就是前面 config 中设置的 Host 名称。

最终命令为:

git remote set-url origin git@one.github.com:lyy289065406/exp-blog.git
  • 执行 git remote -v 可以查看是否修改远程 URL 成功
  • 执行 git pull 可以测试同步远程仓库是否成功

0x50 更新局部用户

首先取消全局用户配置,只需执行一次即可:

git config --global --unset user.name
git config --global --unset user.email

然后切换到每一个 Git 仓库的根目录、单独为每个仓库设置有权限的 用户名/邮箱:

git config user.name "${Github.Account.name}"
git config user.email "${Github.Account.email}"

须得注意的是,Git 的 user.name 和 user.email 不会影响与 Git 服务的认证是选择哪个用户的配置,它们仅用于记录每次提交是谁做的。

0x60 拉取新仓库

以后通过 SSH 拉取新仓库时,可以到该仓库的 Github 页面复制地址: Code -> SSH -> Copy

例如: git@github.com:lyy289065406/exp-blog.git

然后需要修改 SSH 地址: git@one.github.com:lyy289065406/exp-blog.git

最后才执行拉取命令: git clone git@one.github.com:lyy289065406/exp-blog.git


文章作者: EXP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EXP !
 上一篇
为了让外星人了解地球信息,他们拼命想出了这些“乱码” 为了让外星人了解地球信息,他们拼命想出了这些“乱码”
茫茫太空总让人忍不住思考一个深奥的问题:我们地球人是孤独的吗?点点星光处,是其他智慧文明之所吗?随着科学的发展,人类不止于幻想和遐思,从1900年代初开始试图接收可能的外星文明信号。这还是显得被动,为什么不主动给外星文明发信息? ...
2023-02-26
下一篇 
  目录