一个程序员,通常拥有多个开源平台的账号。比如:github、gitee、gitlab 等。多个账号就会带来管理上的一些麻烦。尤其是我们可能需要记住多个账号和密码。这个时候,最推荐的做法就是配置 SSH 的免密登录。
如果是一个账号的话,我相信大多数人都会配置。但是如果是多个账号的话,改如何的在一台电脑上进行无缝的切换呢?今天我给大家阐述一些我的个人使用心得。
Git 账号和 GitHub/GitLab 账号
Git 中其实是没有账号概念的。Git 是高质量的版本控制系统,GitHub 是云端代码托管平台。下图就是它们之间的一些区别:
Git 账号
前面已经说过了,在 Git 中其实是不存在账号的概念的,即没有登录、鉴权等步骤,只有一个全局和本地的配置,能够设置 user.name 和 user.email 用于标识提交者信息。假如说你刚安装 Git,首次提交代码的时候会有如下提示:
Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
git config --global user.name "Your Name"
git config --global user.email you@example.com
就是说你还没有设置提交者信息,全局和本地项目都没有设置,全局的配置在文件:~/.gitconfig 中,项目的配置在 .git/config 中,如果都没有的话,Git 就会获取操作系统用户信息作为提交人信息,例如在 Mac 中,获取方式为 用户全名 <用户名@主机名>,其中:
- 用户全名用 id -F 获取
- 用户名用 id -un 获取
- 主机名用 hostname 获取
所以,如果你不设置提交人信息的话,电脑信息就暴露了,所以建议大家根据上面的提示进行设置。
GitHub/GitLab 账号
这两个账号不用说了,就是登录网站注册得到的,但是注册之后有一个很重要的步骤就是配置 SSH Key,如果不配置的话,网站无法对提交人进行鉴权,因此就无法提交到仓库中。首先要在电脑上生成 SSH Key,生成方法很简单:
ssh-keygen -t rsa -C "www.xttblog.com"
运行之后,在 ~/.ssh 目录下会多出两个文件:
-rw-------@ 1 xttblog codedq 1.6K 12 16 2020 id_rsa
-rw-r--r--@ 1 xttblog codedq 416B 12 16 2020 id_rsa.pub
其中 id_rsa.pub 就是公钥,通过 cat ~/.ssh/id_rsa.pub 获取其内容,复制到 GitHub 或 GitLab 账户的 SSH Key 里面即可,下次再提交的话就能通过了。
如果上面这个步骤还有不懂的,可以参考我的这篇文章《手把手教你使用 ssh-key 免密登录各云服务器和Github》。
多账号操作步骤
Git 多账号
在一个项目中,用下面的命令修改用户名和邮箱即可:
git config user.name xxx
git config user.email xxx
这样的话,就相当于设置了一个新的 Git 账号了,但是要注意,这里的邮箱比较重要,在提交到 GitHub/GitLab 网站的时候,会根据这里设置邮箱(即 user.email)与 GitHub/GitLab 账号中的邮箱进行匹配,如果匹配上了,commit 中的用户名和头像就会 GitHub/GitLab 账号的用户名和头像,如果没匹配上,commit 中的用户名就用 user.name。
GitHub/GitLab/gitee 多账号
这才是本文的重点,如何给托管平台 GitHub/GitLab/gitee 配置多账号。上面已经知道代码托管平台实际上是通过 ~/.ssh/id_rsa.pub 来认证用户的,所以只要多生成几个密钥对就相当于生成了多个托管平台的账号了!注意,生成密钥对之后,记得添加到 GitHub 或 GitLab、Gitee 账户的 SSH Key 里面。
但是生成密钥对的时候不要覆盖之前的密钥对,因为默认会保存到同样的位置,即 ~/.ssh/id_rsa,如果没备份的话,千万不要覆盖,不然就找不到了!(真覆盖了话,也不是什么大事,把原 SSH Key 从托管平台里面删了即可),例如你可以先保存到当前目录下,然后移动到其他位置,例如 ~/.ssh/xttblog/ 目录:
$ ssh-keygen -t rsa -C "taoge"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xtt/.ssh/id_rsa): ./id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./id_rsa.
Your public key has been saved in ./id_rsa.pub
到这里,你就拥有多个 SSH Key 了,于是可以通过下面的命令切换身份:
# 默认就是用的 ~/.ssh/id_rsa,所以加不加一个效果
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa" git clone xxxx
# 使用另外一个私钥
GIT_SSH_COMMAND="ssh -i ~/.ssh/xttblog/id_rsa" git push
# 使用 gitlab 的私钥,当然你得把对应的公钥添加到 gitlab 的 SSH Key 里面才行
GIT_SSH_COMMAND="ssh -i ~/.ssh/gitlab/id_rsa" git push
这种方式虽然灵活,但是不够智能,例如我想要的效果就是:某个平台的所有仓库都使用某个私钥进行认证,这种需求很常见,打开 ~/git/config 文件配置如下:
Host github.com
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github/id_rsa
Host gitlab.com
Hostname gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab/id_rsa
Host gitee.com
Hostname gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee/id_rsa
到这里,多账号的配置基本上已经完成了,但是还有一个不足的地方就是虽然私钥根据域名自动选择了,但是提交的配置还是共享 .gitconfig 中的配置,例如 user.name 和 user.email,能不能根据仓库所在的不同位置选择不同的全局配置文件呢? 答案是可以的,打开 ~/.gitconfig 文件,在末尾添加下面的配置:
[includeIf "gitdir:~/work/gitlab/"]
path = .gitconfig-gitlab
然后再建一个 ~/.gitconfig-gitlab 文件,里面写全局配置,例如:
[user]
name = xttblog
email = xttblog
那么只要仓库被放到了 ~/work/gitlab 目录下面,默认就会使用这个配置了!
: » 一机多Git账号(gitee、github、gitlab)的SSH免密配置
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/252967.html