Mutiple SSH keys for diffrent github accounts

create different public key

Note: blog’s git configuration is global, others is in your project

create different ssh key according to your need

1
2
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa_activehacker -C "jexlab@gmail.com"
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa_jexchan -C "jexchan@gmail.com"

If your command line has no arguments “-f ~/.ssh/id_rsa_activehacker”, as following

1
2
$ ssh-keygen -t rsa -C "jexlab@gmail.com"
$ ssh-keygen -t rsa -C "jexchan@gmail.com"

运行上面那条命令后会让输入一个文件名,用于保存刚才生成的 SSH key 代码,此时需要输入完整的绝对路径,或者只输入文件名,在当前目录生成,生成后移动到指定的.ssh文件夹内,如:

1
2
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/SKS/.ssh/id_rsa): /c/Users/SKS/.ssh/id_rsa_activehacker

你也可以不输入文件名,使用默认文件名,那么就会生成 id_rsa 和 id_rsa.pub 两个全局默认的秘钥文件,前者为私钥,后者为公钥。
当然我们有两个代码仓库,所以最好写上文件名,如id_rsa(公司)或id_rsa_user2(个人). 这样ssh目录下会生成id_rsa.pub和id_rsa_user2.pub两个文件

接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码)。也可以直接按回车键,那么push的时候就不需要输入密码,直接提交到github上了,如:

1
2
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

当你看到下面这段代码的时候,那就说明,SSH key 已经创建成功,只需要添加到github的SSH key上就可以了。

1
2
3
4
Your identification has been saved in /c/Users/SKS/.ssh/id_rsa_activehacker.
Your public key has been saved in /c/Users/SKS/.ssh/id_rsa_activehacker.pub.
The key fingerprint is:
SHA256:Iyie1VCcJRLoOmM2VvY/5XF4KPb9MbQpLmEeOLuVDfA jexlab@gmail.com

2 keys created at:

1
2
~/.ssh/id_rsa_activehacker
~/.ssh/id_rsa_jexchan

then, add these two keys as following(添加到 ssh-agent 信任列表)

1
2
$ ssh-add ~/.ssh/id_rsa_activehacker
$ ssh-add ~/.ssh/id_rsa_jexchan

you can delete all cached keys before

1
$ ssh-add -D

finally, you can check your saved keys

1
$ ssh-add -l

请注意:此处有坑,你可能会遇到这样的问题

1
Could not open a connection to your authentication agent.

解决方案:(也可以是其他的,参考资料里边stackoverflow里边的答案你都可以试试)

1
$ ssh-agent bash

这之后,再添加。看到如下所示的情况,就证明添加成功了

1
2
$ ssh-add ~/.ssh/id_rsa_activehacker
Identity added: /c/Users/dong/.ssh/id_rsa_activehacker (/c/Users/dong/.ssh/id_rsa_activehacker)

添加ssh-key到github

在 Github 的后台,可以看到一个叫做 SSH and GPG keys 的选项:
SSH and GPG keys
这里面列出了当前账号绑定的 SSH Key。 每一个 key 对应一台独立的设备。

设置好两个ssh key之后就要配置下它们的使用场景
登录你的github账号,从右上角的设置( Settings )进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key。
点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。当然,上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。

Modify the ssh config

1
2
3
$ cd ~/.ssh/
$ touch config
$ subl -a config

Then added

1
2
3
4
5
6
7
8
9
10
11
#activehacker account
Host github.com-activehacker
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_activehacker

#jexchan account
Host github.com-jexchan
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_jexchan

这样,在我们创建的 config 文件中,配置了两条记录。 分别指向两个 SSH key。 HostName是原本的域名 Host是与HostName对应的自定义的名字。

Clone you repo and modify your Git config

clone your repo

在项目的下载地址中,有一个 Use SSH 的链接,点击它之后,就可以得到 SSH 格式的地址
比如 git@github.com:activehacker/gfs.git。 我们需要对它稍作加工,把域名部分替换成我们在 config 中配置的 Host: git@github.com-activehacker:activehacker/gfs.git。

1
$ git clone git@github.com:activehacker/gfs.git gfs_jexchan

这样本地仓库就和对应的密钥建立起了联系。 以后的操作中,都会自动使用这个 SSH key 来访问 Github 远程仓库了。 如果想同时在另外一个本地仓库使用其他 Github 账户,只需要在 ~/.ssh/config文件中配置好相应的 SSH key 和对应的 Host,就可以了。

cd gfs_jexchan and modify git config(为每个仓库单独设置用户)

1
2
3
4
5
$ git config user.name "jexchan"
$ git config user.email "jexchan@gmail.com"

$ git config user.name "activehacker"
$ git config user.email "jexlab@gmail.com"

then use normal flow to push your code

1
2
3
$ git add .
$ git commit -m "your comments"
$ git push
-------------本文结束感谢您的阅读-------------

本文标题:Mutiple SSH keys for diffrent github accounts

文章作者:sanks

发布时间:2020年01月05日 - 20:01

最后更新:2022年03月15日 - 00:06

原始链接:https://www.sanks-blog.com/Mutiple-SSH-keys-for-diffrent-github-accounts/

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