Mac 上配置多个git 账户的秘钥(github/gitlab/gittee)

327 阅读6分钟

【前言】git是程序员们的必备工具,当我们在很多个git网站上申请了仓库,设备上需要配置不同的git的邮箱,账户和密钥,本文详细介绍了如何在 Mac 设备上如何配置多个git 账户和密钥,如有不足,欢迎留言。

1.用户名和邮箱

git 全局配置的用户名和邮箱是默认的配置,最好 不 要 删 除,删除的话,在vscode中提交代码会报错,说没有检测到 user.nameuser.email,此时我们是没办法提交代码的,所以不要看了某些文章说要删掉,呵,不要删,删了有问题。

那么,如果说全局的配置user.name user.email 和我们从 github 克隆的账户和邮箱不一致,例如我们全局配置的是公司账户下(gitlab)的 user.name user.email ,但是呢,我们学习的时候从自己的github 上的仓库里 clone 下了代码,改了改,准备提交,此时如果说不进行任何操作,那么使用的是全局的user.name user.email 的配置,那么就是有问题的。那如何解决这个问题呢?

我们说有全局的配置,就有一定有局部的配置,我们可以在项目的根目录下执行局部 git 命令,配置局部的 user.name user.email 即可。有点像那个项目下的 package.json 局部设置了就使用局部配置,局部没设置就往上一级找,一般是用全局配置。

这里给大家贡献下设置的代码

1.1 全局配置

设置全局 user.name user.email

git config --global user.name "your_name"
git config --global user.email "your_email@foxmail.com"

1.2 局部配置

设置局部的 user.name user.email (请在终端中打开我们项目所在的位置的根目录再执行此代码)

git config user.name "yourname" 
git config user.email "youremail@foxmail.com"

1.3 生效检测

查看是否生效

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

当然我也提供下删除的命令,虽然不建议删除,不过想删你就删

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

2.本地生成新的SSH key

2.1 打开终端,执行命令

cd ~/.ssh 
ssh-keygen -t rsa -C "email"

2.2 自定义文件名称

默认名称是 id_rsa, 但是我们为了后边好区分,我们这里需要自定义名称,例如 github 的,我们命名为 id_rsa_github ,以此类推(gitlab --> id_rsa_gitlab ; gitee --> id_rsa_gitee

Enter file in which to save the key (~路径/.ssh/id_rsa): id_rsa_github

验证SSH Key

cd ~/.ssh 
ls 
cat id_rsa_github.pub 

其实如果你不想使用 cat 命令, 你就这样,先 cd ~/.ssh 然后执行 open ./ 这样你就能够在文件夹中看到你生成的文件,然后双击,或者直接拖拽到 vscode,你就能够直接看到 SSH Key了

不过我想说的是,我们这里声称的 SSH Key 有两个文件,一个带后缀名 .pub 例如 id_rsa_github.pub 另一个没有后缀名,那么区别是什么呢?—— 分别为公钥和私钥,我们需要配置在 github gitlab gitee 上的是公钥,即是那个带 .pub 后缀的文件中的 秘钥,别搞错了哦。

3. 添加并识别SSH Keys

系统默认读取的是 id_rsa , 这里我们需要关联我们自己的文件

ssh-agent bash #这行命令可以不执行,放在这里只是说别的文章有,查了下资料,这个只是为了某些设备兼容
ssh-add ~/.ssh/id_rsa_github

4. 复制公钥并添加到git网站

pbcopy < id_rsa_github.pub 

添加到github 的SSH Key中,路径为 User > Setting > SSH Key

5. 创建并配置 config 文件

创建文件

touch ~/.ssh/config 

打开文件

open ~/.ssh/config

写入配置

Host *
  AddKeysToAgent yes
  UseKeychain yes

Host github
HostName github.com
User kevinlaizhiyu
IdentityFile ~/.ssh/id_rsa_github

Host gitlab
HostName git.xiujiadian.com
User laizhiyu
IdentityFile ~/.ssh/id_rsa_gitlab

Host gitee
HostName gitee.com
User kevintauraus
IdentityFile ~/.ssh/id_rsa_gitee

由于这个配置文件中最好不要带上注释,所以我单独解释下各个字段的含义

Host *
  AddKeysToAgent yes
  UseKeychain yes
# 这三行,就是,以前需要写这个,然后执行命令 ssh-add -K ,
# 只需要添加一次就能够开启自动生效,后来mac上不能这么玩了, 
# 就用 ssh-add --apple-use-keychain ,

# 再后来,后一种方法都不能永久生效了,
# 每次开机都要重新执行 ssh-add ~/.ssh/id_rsa_github 
# 就很麻烦,文章的后边我会讲一下如何处理,先把主要问题解决弄完

Host github # 域名缩写
HostName github.com # 域名
User kevinlaizhiyu # github上的用户名,就是你每个仓库前面的前缀
IdentityFile ~/.ssh/id_rsa_github # 秘钥地址

# 其他配置,自己类比

6. 验证连接git

ssh -T git@github.com //执行成功打印  
// Hi XXX! You've successfully authenticated, but GITEE.COM does not provide shell access. 
// Welcome to GutHub, @XXXXX!

7.常见问题

7.1 Permission denied(Publickey)

要么就是密钥配错,要么就是没有添加到 SSH 钥匙链

密钥配错就重新配一下,详见前文;

没有添加就重新添加下,代码如下:

ssh-add ~/.ssh/id_rsa_github

7.2 Mac重启之后不生效

那是因为 ssh-add 这个命令,是临时的,也就是说电脑关机充值之后就不生效了,之前mac还能够添加一次永久生效,现在不行了,那咋整?两个思路:

思路一:利用mac的自动化,将代码写到自动化执行脚本中,然后再 设置>群组>登录项 中添加这个自动化的脚本文件,这样每次开机就会自动执行这个脚本。下边我会附上详细的配置方法,但是我需要说明的是,即便是我们配置好了,mac重启之后只会打开这个自动化脚本的执行页面,需要手动点击执行按钮,电脑才会执行脚本,效率不高。

如果我们想要实现开机自动执行脚本,且不需要人为干预,咋弄了?

思路二:新建一个ssh-add.sh,写入 ssh-add 命令,然后配置开机自动执行

好,下面是两种思路的详细的操作说明

思路一 自动化

  • 选择 “自动操作” 这个机器人 image.png
  • 添加脚本并命名 image.png
  • 设置 -> 用户与群组 image.png
  • 添加登录项 image.png

重启之后,我们会看到电脑打开了自动化的页面,此时需要我们手动点击“执行”按钮,方可生效 image.png

思路二 自定义脚本

要在Mac开机后自动执行多个Shell命令,你可以创建一个启动脚本(startup script)来批量执行这些命令。以下是在开机后自动执行多个ssh-add命令的步骤:

  • 打开终端。
  • 创建一个新的启动脚本文件。可以使用以下命令创建一个名为 ssh-add-keys.sh 的文件:
nano ssh-add-keys.sh
  • 在打开的文件中,添加以下内容:
#!/bin/bash

ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitlab
ssh-add ~/.ssh/id_rsa_gitee

这个脚本将依次执行每个 ssh-add 命令,添加对应的SSH密钥。

  • 保存文件并退出编辑器。
  • 将启动脚本设置为可执行权限。在终端中执行以下命令:
chmod +x ssh-add-keys.sh
  • 然后 在用户与群组->登录项 中添加这个文件 ssh-add-keys.sh
  • 重启你的Mac。

现在,在每次开机后,系统会自动执行启动脚本中的ssh-add命令,以将对应的SSH密钥添加到密钥链中。

请注意如果你更改了SSH密钥的路径或添加了其他SSH密钥,请相应地更新启动脚本中的路径。