由于公众号改版不再按照作者的发布时间进行推送,为防止各位朋友错过月来客栈推送的最新文章,大家可以手动将公众号设置为“星标⭐”以第一时间获得推送内容,感谢各位~
今天要介绍看技能是如何在一台电脑上配置多个Git账户(Github、Gitlab)的SSH访问权限。用过Github的朋友都知道,通常情况下我们都是通过Gitbash提供的命令行来与Git账户进行交互。但是由于一对rsa密钥只能绑定一个Git账户,所以对于有多个Git账户的朋友来说显得就不那么友好。下面笔者就来介绍一下如何生成多个rsa密钥对来完成对多个Git账户的绑定,并且在不同Git账户对应的仓库里上传代码时能够选择对应的rsa私钥。
要实现上述目的需要完成如下五个步骤,下面笔者一步一步的来进行介绍。
1 生成密钥对
首先需要为多个Git账户分别生成一对rsa公钥和私钥。这里我们以两个Github账户和一个Gitlab账户为例来进行演示。
第一步,为第一个Github账户生成密钥对
打开
Gitbash
命令行窗口输入如下命令:ssh-keygen -t rsa -C 'moon-hotel@hotmail.com' -f ~/.ssh/id_rsa_moon # 用于Github
其中
-C
后面接的是对于Git账户的登录邮箱(其实不要也行);-f
后面表示指定密钥的保存路径。在执行完这条命令后,文件夹.ssh
中便会出现id_rsa_moon
和id_rsa_moon.pub
这两个文件。第二步,生成余下密钥对
按照第一步中的命令,分别为其余Git账户生成密钥对。
ssh-keygen -t rsa -C 'moon-hotel@126.com' -f ~/.ssh/id_rsa_tolic # 用于Github
ssh-keygen -t rsa -C 'moon-hotel@hotmail.com' -f ~/.ssh/id_rsa_lab # 用于Gitlab在完成这步操作后,在
.ssh
文件夹中就能看到如下6个文件:
其中每一行的两个文件表示一个密钥对,左边为私钥右边为公钥。
2 添加密钥对
在对应的Git账户中添加生成好公钥,也就是将.pub
中的内容添加到Git账户中。
![9ffaf1fbdb37cbccd373045711cca56a.png](https://img-blog.csdnimg.cn/img_convert/9ffaf1fbdb37cbccd373045711cca56a.png)
如图2所示为Github中添加公钥的示意图,在Gitlab中也是类似样子(注意添加的时候选SSH key,而不是GPG key)。复制进去后点击添加按钮即可完成添加。在这里,我们将公钥id_rsa_moon.pub
和id_rsa_tolic.pub
分别添加到两个Github账户中;将id_rsa_lab.pub
添加到Gitlab账户中。
3 建立配置文件
如果仅仅只有一个Git账户,并且在生成密钥匙采用的是默认名(id_rsa
),那么在使用Git进行相关操作时默认就会去文件夹.ssh
中查找名为id_rsa
的私钥。由于我们这里有三个密钥对,且分别对应着不同的Git账户,因此我们需要对其进行指定。
在.ssh
文件夹中,建立一个名为config
的文件(注意,没有后缀名),然后用记事本打开输入如下内容:
# Tolicwang
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_tolic
# Moon-hotel
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_moon
# hotel
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_lab
可以看到,前两个指定的是Github账户,后两个指定的是Gitlab账户,然后保存。
4 平台认证
第一次配置Git账户的时候需要同对应的托管平台进行密钥认证。下面我们首先来和Gitlab平台进行认证:
ssh -T git@gitlab.com
![3092d5ed378b4f5ceb1bd3707e8f883d.png](https://img-blog.csdnimg.cn/img_convert/3092d5ed378b4f5ceb1bd3707e8f883d.png)
在执行完上述命令后就能看到如图3所示的反馈。可以看到,Git根据config
这个配置文件自动选择了id_rsa_lab
这个私钥来与Gitlab账户中对应的公钥进行认证。接着,我们来和Github平台进行认证:
ssh -T git@github.com
![2f8f6e55de238350cee277844f79a823.png](https://img-blog.csdnimg.cn/img_convert/2f8f6e55de238350cee277844f79a823.png)
如图4所示,在执行完命令后,就会自动让你输入其中一个Github账户密钥的密码进行认证。可以看出,这里默认的第一个是id_rsa_tolic
,也就是moon-hotel@126.com
对应的Github账户。这样与moon-hotel@126.com
对应的Github账户就完成认证了。那怎么与moon-hotel@hotmail.com
对应的Github账户进行认证呢?
如图5所示,我们只需要再次输入命令ssh -T git@github.com
,在弹出id_rsa_tolic
这个私钥时直接回车(不要输入任何字符),即可跳转到moon-hotel@hotmail.com
对应的密钥。接着输入对应的密码即可完成与moon-hotel@hotmail.com
对应的Github账户的认证。
![5d622a4d966a650b6461b2141ed8099a.png](https://img-blog.csdnimg.cn/img_convert/5d622a4d966a650b6461b2141ed8099a.png)
5 测试
现在我们来到id_rsa_tolic
对应的Github仓库的目录中,输入git push
命令,同时输入密码便能看到如下提示:
DESKTOP-EAL8B6H MINGW64 /d/MachineLearningWithMe (master)
$ git push
Enter passphrase for key '/c/Users/xxxx/.ssh/id_rsa_tolic':
Everything up-to-date
可以看到一切正常,告诉我们没有内容需要更新的。如果此时我们故意选择另外一个私钥(id_rsa_moon
),那么就会出现如下错误提示。这是因为一个私钥只能对应一个github账户。
DESKTOP-EAL8B6H MINGW64 /d/MachineLearningWithMe (master)
$ git push
Enter passphrase for key '/c/Users/xxxx/.ssh/id_rsa_tolic':
Enter passphrase for key '/c/Users/xxxx/.ssh/id_rsa_moon':
ERROR: Permission to TolicWang/MachineLearningWithMe.git denied to moon-hotel.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
当然,如果是在密钥id_rsa_moon
对应的仓库中,则就要选择id_rsa_moon
来进行认证。
本次内容就到此结束,感谢您的阅读!如果你觉得上述内容对你有所帮助,欢迎关注并传播本公众号!若有任何疑问与建议,请添加笔者微信'nulls8'或者留言进行交流。青山不改,绿水长流,我们月来客栈见!
引用
[1]https://blog.csdn.net/myNameIssls/article/details/80516577
推荐阅读
[1]一站式语料标注工具(你值得拥有)
[2]你最好还是了解一下screen神器!
[3] Xshell服务器远程连接利器(附软件安装包)
[4]Pycharm环境配置
[5]Miniconda环境配置