0


一台电脑双 GitHub 账户配置,同时两个 SSH 密钥

前言

本人搞了两个 GitHub 账号,一个用来正常的和别人合作项目,另一个用来自己写一些代码,希望能做到两个本地账户和远程账号都完全隔离,没有联系,也不会被混淆使用。

但是这样就会有一个问题,设置本地用户

user.email

时候,如果两个

GitHub

账号仓库使用同一个本地用户,

GitHub

会将本地的用户自动与相应的

GitHub

账号关联起来,这样在

commit

记录里面就能看到是谁提交的了,这是我不想看到的结果。

最开始以为只要把同一个

SSH

公钥分别添加到两个

GitHub

账户,再在不同的仓库设置不同的

user.name

user email

就 OK 了. 并不行,每个公钥只能用一次。然后就考虑生成两个密钥,分别添加到不同的账户,但是电脑在连接远程仓库时,只能默认选择其中固定的一个来连接,并不会根据不同仓库的设置选择不同的密钥,结果就是还是只能免密连接一个

GitHub

账户的仓库。

你所使用的

SSH

密钥决定了你是否有权限访问某一个

GitHub

账号下面的仓库,而你本地仓库设置的

use email

决定了在

GitHub

commit

记录中的用户,而一般在没有进行以下配置的情况下,你的电脑只会默认使用一个

SSH

密钥进行连接,这就导致了你只能访问一个

GitHub

账号。

如果访问另一个

Github

账户,在

push

时就会报如下错误:

下面将详细介绍方法:

假设现有两个账号分别如下: 一个账号名为

99Young99

、另一个为

CS-Research-alliance


注: 这里举例实现在相同的平台 Github 不同账号使用不同的 SSH,也可以用相同的方法,在不同的平台使用不同的 SSH

1. 生成密钥

首先是先生成两个

SSH

密钥,对应两个身份(假设为

99Young99

CS-Research-alliance

)。

1.1 检查是否已经有 SSH-Key

打开

Git bash

(Linux 中需要打开 Shell),进入

~/.ssh

目录,通过命令看看电脑上有

SSH-Key

的相关文件没!

cd ~/.ssh
ls

在这里插入图片描述

如果显示

id_rsa

id_rsa.pub

文件,说明已经有

SSH Key

了。如果没有,那么根据下面步骤 生成一个!

1.2 生成一个(或多个)SSH-Key

生成一个

Github

用的

SSH-Key

,其中

github_id_rsa

为密钥的文件名,

~/.ssh/github_id_rsa

为密钥目录位置:

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

利用上述命令,生成了一对秘钥

github_id_rsa

github_id_rsa.pub

, 保存在了

~/.ssh

文件夹内。

生成另一个

SSH-Key

,其中

Othergithub_id_rsa

为密钥的文件名,

~/.ssh/Othergithub_id_rsa

为密钥目录位置:

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

这时候要特别注意

-f ~/.ssh/Othergithub_id_rsa

用于重命名,否则会覆盖上面的密钥文件。假设生成了一对新的秘钥

Othergithub_id_rsa

Othergithub_id_rsa.pub

然后分别将这两对密钥加入到对应的

GitHub

账户中。

本章产生的两个密钥案例如下:
在这里插入图片描述

2. 编辑配置文件

编辑

~/.ssh/config

文件。如果该文件不存在的话,直接创建一个就好(通过

touch

命令新建

config

文件,并用

vim

编辑器打开

config

文件)。

不同

Host

实际映射到同一

HostName

,但密钥文件不同。

Host

前缀可自定义,例子中

99Young99

分步解释

Host 99Young99.github.com (自定义的 Host 简称,以后连接远程服务器就可以用 99Young99.github.com 代替 HostName 的 github.com, 相当于网站的别名,随意取,并且可以去掉 github.com 直接取名为 99Young99.github.com)

Host 远程仓库的地址,注意哦,如果有些服务器做的 ip 端口转发,这里不要带上端口号
Host 99Young99.github.com
HostName (托管网站的域名) 是远程仓库的地址,同样如果做的端口转发也不应带端口号 
HostName 主机名可用 ip 也可以是域名(如:github.com或者bitbucket.org)
网上大部分教程的配置文件中 Hostname 都是 github.com,配置成那样可能不能正常 SSH 访问,如果没有成功,改为 ssh.github.com 试一下 (本人没加 ssh 成功了,如下)
HostName github.com
Port 端口号,如果有做转发需要在这里填写端口号,没有就不必要填
Port 服务器 open-ssh 端口 (默认:22,默认时一般不写此行)
Port 8800
PreferredAuthentications publickey
用户
User 登录用户名(如:git) // 即 github 上的用户名
User 99Young99
识别 key 的文件
IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)
IdentityFile ~/.ssh/id_rsa

完整配置

Host 99Young99.github.com
HostName github.com
PreferredAuthentications publickey
User 99Young99
IdentityFile ~/.ssh/id_rsa

配置另一个 Github 账号

都指向同一个平台的话,下面的 Host 需要做个处理,因为我们在用这个 key 的时候根据 Host 从上到下进行查找,不做修改肯定会先查找到第一个 key, 依旧无效,随便改就好了,其他参数不做特殊处理
Host CS-Research-alliance.github.com
HostName github.com
PreferredAuthentications publickey
User CS-Research-alliance 
IdentityFile ~/.ssh/github_id_rsa
网上大部分教程的配置文件中 Hostname 都是 github.com,配置成那样是不能正常 SSH 访问的。

先注意一下: 这里一定是先把两个公钥添加到对应的

GitHub

账户,再进行下面的

ssh

连接测试,否则肯定是连接不上,会显示

permission denied

。)

第 1步】首先创建 GitHub 账号并登陆,打开 Setting 进行设置,新建

SSH key


第 2 步】点

New SSH key

后,填上任意

Title

,在

Key

文本框里粘贴

id_rsa.pub

文件的所有内容:

第 3 步】输入密码进行确认,最后就可以看到,

SSH key

添加完成

这时候,可以测试一下配置是否成功,测试命令使用别名。例如,对于

GitHub

,本来应该使用的测试命令是:

ssh -T [email protected]

但在

config

文件中,给

GitHub

网站配置的别名就是

CS-Research-alliance.github.com

以及

99Young99.github.com

,所以直接使用别名,就是

ssh -T [email protected]
ssh -T [email protected]

出现如下信息说明配置成功了

Hi CS-Research-alliance! You've successfully authenticated, but GitHub does not provide shell access.

在这里插入图片描述

同样的方式就可以配置更多的以

SSH

登录的不同

git

用户。

3. 配置仓库设置

配置仓库是因为这个时候有多个 SSH ,并对应了多个账户,所以每个账户应该在对应仓库配置专属的本地用户名和邮箱,否则默认所有用户均使用的全局用户名和邮箱。

首先要删除

Git

配置的全局用户名和邮件地址,接着在每个项目仓库中按照需求设置不同的

user.name

user.email

# 查看全局配置git config --global user.name
git config --global user.email

# 查看本地配置(只能在 git 仓库中使用)git config --local user.name
git config --local user.email
# 删除全局设置git config --global --unset user.name
git config --global --unset user.email

# 添加本地设置# 设置为私有仓库的GitHub账号邮箱和公有账号的GitHub邮箱。git config --local user.name "个人github账号名"git config --local user.email "个人github账号邮箱"

对于

Github

99Young99

的本地仓库配置如下:

git config --local user.name "99Young99"git config --local user.email "[email protected]"

对于

Github

CS-Research-alliance

的本地仓库配置如下:

git config --local user.name "CS-Research-alliance"git config --local user.email "[email protected]"

如果出现如下报错,是因为必须要进入到 git 仓库才可以正常执行命令

fatal: --local can only be used inside a git repository

这一步以及后面的添加远程仓库,每创建一个新的本地仓库的时候,都需要指定,因为全局配置已经删除了

之后在添加远程仓库的时候,把

github.com

修改成

99Young99.github.com

或者

CS-Research-alliance.github.com

就好了(即上述文件中的

Host

选项),用上面两个

Host

名称来代替原来的

github.com

,(这一步很重要)如:

git remote add origin [email protected]:xxx/example.git # 99Young99git remote add origin [email protected]:xxx/example.git # CS-Research-alliance.github

其实,上面的配置文件的意思就是,按照设置远程仓库时使用不同的

Host

名称,查找

~/.ssh/config

文件,使用不同的

SSH

文件连接到

GitHub

。这样你就将是以不同的身份访问

GitHub

仓库。

4. 提交项目到不同的账户

比如提交到

CS-Research-alliance

账户上

初始化本地仓库

git init 

连接远程仓库,注意远程仓库的地址,其中

@

后默认为

github.com

,需要改为

~/.ssh/config

配置

Host

时的别名,如本人的为:

CS-Research-alliance.github.com
git remote add origin [email protected]:CS-Research-alliance/Summer-camp-and-exemption.git # 连接远程仓库

由于

Github

创建分支默认为

main

,所以需要将本地的

master

分支改为

main

分支(先看最后的命令解释,再考虑是否执行此句)

git branch -M main

如果远程仓库有内容,包含

README

文件,需要先执行下述命令

git pull --rebase origin master

提交项目

gitadd.git commit -m "任意内容"
-u

表示如果远程没有

master

分支,会创建一个

master

分支,并将项目提交上去,也就不需要将本地的

master

分支改为

main

了,否则执行:

git push -u origin main
git push -u origin master

References

[1] 一台电脑双GitHub账户配置

[2] 新手如何配置多个 SSH Key(通俗易懂手把手教学)

[3] 怎么给Git配置多个SSH Key?

[4] 一台电脑绑定两个(或多个)github账号

[5] 在一台电脑上配置多个github和gitlab账号

标签: github git linux

本文转载自: https://blog.csdn.net/qq_46450354/article/details/129997855
版权归原作者 青年有志 所有, 如有侵权,请联系我们删除。

“一台电脑双 GitHub 账户配置,同时两个 SSH 密钥”的评论:

还没有评论