关于多个SSH KEY的git配置(以github与gerrit为例)

4,241 阅读5分钟

导语

进入公司已经一段时间,由于在入职的时候并没有重新配置SSH KEY,而是在工作中沿用之前在Github使用的密钥,由此导致在Github上的项目VCS log中的提交者与github账户名称不一致,所以想要配置两个SSH KEY将工作与个人github区分开来,由于配置上出现失误以及没有get到参考博主所提供的配置样例中的要点,所以过程曲折。
以下是具体配置流程。

开始

在正式开始进行配置前,需要进行一些准备工作。
右键桌面或任意文件夹,并单击菜单中的“Git Bash Here”,执行以下命令查询当前git的配置信息

git config --global --list

1GlobalConfig.png

如果user.name与user.email存在值,建议执行如下命令将其unset

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

完成全局用户名和邮箱的重置后,执行以下命令将跳转到.ssh目录(该文件夹默认在主目录下)

cd ~/.ssh

这时可以使用

ls -all

命令检查一下该目录下是否有之前配置过的密钥对以及config或是host文件,由于笔者在进行配置时删除了密钥对,所以下面的流程是基于删除存在的所有密钥对后进行的操作,如不愿意删除原有密钥,可以将以下过程进行对比,并自行修改配置步骤。

Github配置

完成上述准备工作后,以下将正式开始SSH KEY的配置流程。

1、生成Github的SSH KEY

在bash窗口中执行以下命令生成github的SSH密钥对

ssh-keygen -t rsa -f ~/.ssh/fileName_id_rsa -C "yourMail@Mail.com"

其中 "-f" 后的 "~/.ssh"为密钥对生成的路径,"fileName_id_rsa"为密钥文件的文件名,可以自行修改。
执行上述命令后一路回车(默认不设置密码),执行完毕后即完成密钥对的生成。

2SshKeygen.png

检查文件是否生成成功

3KeyGenResult.png

2、在Github上添加刚生成的SSH KEY公钥

成功生成密钥对后,执行以下命令打印公钥

cat ./fileName_rsa_id.pub

4SshPubKey.png

或是直接使用记事本打开公钥文件,全选并复制其内容后,进入Github,依次点击Setting -> SSH and GPG keys -> New SSH key

5GithubSshkey.png

页面上的Title可以填写任意字段,并将刚才复制的公钥粘贴到Key文本框中,点击Add SSH key即完成配置。

Gerrit配置

Gerrit的配置流程和Github的几乎相同,在生成SSH KEY密钥对后,将公钥配置到Gerrit网站上即可。

1、生成Gerrit的密钥对

在bash窗口中执行以下命令生成github的SSH密钥对

ssh-keygen -t rsa -f ~/.ssh/gerritFileName_id_rsa -C "yourWorkMail@WorkMail.com"

其中 "-f" 后的 "~/.ssh"为密钥对生成的路径,"gerritFileName_id_rsa"为密钥文件的文件名,可以自行修改。 执行上述命令后一路回车(默认不设置密码),执行完毕后即完成密钥对的生成。

7GerritSshKeygen.png

检查文件是否生成成功

8gerritKeyGenResult.png

2、在Github上添加刚生成的SSH KEY公钥

成功生成密钥对后,执行以下命令打印公钥

cat ./fileName_rsa_id.pub

或是直接使用记事本打开公钥文件,全选并复制其内容后,进入你公司的Gerrit网站,在右上角用户名的菜单中点击Setting

9gerritSetting.png

然后再在左侧菜单中点击 SSH Public Keys -> Add进行添加

10gerritAddNewKey.png

重要!Config文件配置

完成上述 Github 与 Gerrit的密钥对生成后,需要在 ~/.ssh目录下创建一个config文件,git将使用该文件中的配置来决定将要进行的ssh链接是该使用哪一个密钥。

执行 vi config命令在 ~/.ssh目录下创建一个config文件,并按 i 编辑其内容,下面提供一个范本:

# github
Host github.com
HostName github.com
User githubUsername
IdentityFile ~/.ssh/github_id_rsa
PreferredAuthentications publickey

# gerrit
Host 192.168.123.123 | gerrit.com
HostName 192.168.123.123
Port 12345
User gerritUsername
IdentityFile ~/.ssh/gerrit_id_rsa
PreferredAuthentications publickey

以下为各字段的解释: Host: 该字段可任意填写,且可以一次性配置多个。该字段将会用于ssh 连接命令中,例如:

//格式
ssh -T userName@Host
//示例
ssh -T git@github.com 
//@后内容与上方config中的Host字段内容相同

HostName:该字段为将要链接的实际地址,可以为具体ip或是可用域名
Post:端口
User:用于连接的用户名
IdentityFile:用于进行验证的私钥文件路径
PreferredAuthentications: 优先用于验证的方式,此处选为publickey,即是用公钥

注意!关于加密算法的选取

如果在严格按照本文中的流程正确配置好秘钥对后,仍然不能成功建立ssh连接,则请尝试使用以下参数查看日志

ssh -vT yourName@gerrit.com

image.png

可以发现图中结果显示:主机 ** 使用ED25519方式进行加密,此时可以判断使用前文中的rsa方式生成的秘钥对不能匹配目标主机的加密方式,所以此时需要把生成秘钥对的命令做以下修改,然后在删除现有的文件后,重新执行gerrit的秘钥配置流程即可。

ssh-keygen -t ED25519 -f ~/.ssh/gerritFileName_id_ED25519 -C "yourWorkMail@WorkMail.com"

测试链接

完成上述测试后,即已经完成了SSH Key的配置。接下来可以使用ssh -T 命令来测试配置的密钥是否可用。
在这里笔者删除了用于示例的两对密钥文件,仅留下可用的密钥用于展示。

使用

ssh -T git@github.com

命令测试连接Github。
注意:使用Git对Github进行ssh连接时,要写成git@github.com,而不能写成yourName@github.com

11githubSuccess.png

同样的,执行

ssh -T username@gerrit.com
ssh -T username@192.168.123.123

命令测试连接Gerrit。

12gerritSuccess0.png

13gerritSuccess1.png

至此,github与gerrit所分开的两组公钥配置完毕。