git 设置本地配置多个账户对应不同的 ssh key

生成多个 ssh key

一般是这样生成 ssh key 的:

1
ssh-keygen -t rsa -C "[email protected]"

经过多步的操作后,会在 ~/.ssh/ (linux) ,C:\Users\\username\.ssh\ (windows)下生成公钥和私钥,默认名称为:id_rsaid_rsa.pub文件。

上述的操作确实可以解决使用同一个邮箱账户配置git ssh key的问题,但如果我们的机器不仅仅使用github,还需要使用到公司的gitlab呢?

一般公司都是用企业邮箱注册的 gitlab,这样使用通用邮箱生成的 ssh key 便无法通用,从而还需要再使用 ssh 生成一个关联企业邮箱的公私钥,如果使用默认的生成 key 命令,则会因为生成的 key 文件的名称不同,所以会有覆盖掉之前生成的 key 的问题或者根本不允许再次生成相同文件名的公私钥,因而导致一台机器上无法同时使用多个 key。

如何解决git配置多个 ssh key 时如何解决冲突的问题,即每次生成 key 的时候,给 key 取一个自己定义的别名,然后修改 ssh key 的配置文件即可。

step 1. 首先生成不同名称的 key 文件(公私钥)

如生成一个 github 帐号使用的 key:

1
ssh-keygen -t rsa -C "[email protected]" -f ~/.ssh/github_id_rsa

如生成一个 github 帐号使用的 key:

1
ssh-keygen -t rsa -C "[email protected]" -f ~/.ssh/gitlab_id_rsa

上述命令执行之后,在相应的目录下~/.ssh/(linux),C:\Users\\username\.ssh\(windows),生成了两种key。

git for windows 2.33.1 版本已使用 OpenSSH 8.8

需要使用 ed25519 算法生成 key:

ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/github_id_ed25519

step 2. 给远程仓库配置添加信任 ssh key

step 3. 配置 config

我们需要在目录:~/.ssh/(linux) ,C:\Users\\username\.ssh\(windows),创建config文件,并且配置ssh key的路由策略:

linux 中的配置如下:

1
2
3
4
5
6
7
8
9
10
11

# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

widows 中的配置如下:(windows下配置~/.ssh不识别)

1
2
3
4
5
6
7
8
9
10
11
12

# 配置github.com
Host github.com
HostName github.com
IdentityFile C:\\Users\\username\\.ssh\\github_id_rsa
PreferredAuthentications publickey

# 配置gitlab.com
Host gitlab.com
HostName gitlab.com
IdentityFile C:\\Users\\username\\.ssh\\gitlab_id_rsa
PreferredAuthentications publickey

step 4. 测试 ssh key 是否通过

使用命令:

1
ssh -T [email protected]

测试是否配置成功。

其他配置

去除全局用户和邮箱

步骤1:如果已经设置过全局用户名和邮箱,那么要把取消掉,否则 默认使用全局配置:

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

查看全局用户配置信息:

1
git config --global --list

配置全局用户和邮箱:

1
2
git config user.name "woodwhales"
git config user.email "[email protected]"

步骤2:将所有生成 ssh key 执行如下命令:

1
2
ssh-add -K ~/.ssh/github_id_rsa
ssh-add -K ~/.ssh/gitlab_id_rsa

如果上述命令提示:

1
Could not open a connection to your authentication agent.

则需要先执行:

1
eval `ssh-agent -s`

如果提示:

1
Enter PIN for authenticator:

则执行如下命令:

1
2
ssh-add ~/.ssh/github_id_rsa
ssh-add ~/.ssh/gitlab_id_rsa

SourceTree 配置

步骤1:工具 - 选项

步骤2:选择”一般”选项卡,去除”默认用户信息”中的全名和电子邮件地址。

步骤3:设置”SSH客户端配置”中的SSH客户端为:OpenSSH,并将 SSH 密钥文本框清空

updated updated 2024-01-05 2024-01-05
本文结束感谢阅读

本文标题:git 设置本地配置多个账户对应不同的 ssh key

本文作者:

微信公号:木鲸鱼 | woodwhales

原始链接:https://woodwhales.cn/2019/11/11/052/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%