最近有个小学妹刚入职新公司,公司用的是Git
版本管理工具,然后她其实自己也经常玩Github
,Git
用起来基本操作也不大。但是现在她遇到一个小问题,相信这个问题很多程序员(媛)也经常遇到。什么问题呢?来跟大家唠一唠。
大家都知道,在多人协作开发中,我们需要把代码提交到Git
服务器的。但是并不是所有人都可以往服务器上推送代码,只有有相应权限的人才能推送,所以就涉及到如何对服务器进行授权的问题。现在授权方式有两种,一种是HTTP/HTTPS
协议,另外一种是SSH Key
协议。
HTTP/HTTPS
协议好处是方便,不需要繁杂的配置,push
的时候直接输入用户名和密码就行。但是有个不好的是,每次进行PUSH
操作,都需要进行授权,对于长期需要在这个仓库下工作来说,这显得就有点太麻烦了。
还有另外一种授权方式,就是SSH Key
,SSH Key
是先在本地生成一个公钥和秘钥,然后再把公钥配置到Git
服务器上,以后每次提交代码,Git
会自动和本地的秘钥进行匹配,如果匹配到了,就代表授权成功,否则就是授权失败。SSH Key
的方式好处是一次授权,次次可用。但第一次配置会稍微麻烦一点,不过对于长期在某个Git
服务器上工作来说,这样一次麻烦,还是很值得的。
再回到刚刚那个小学妹的问题上,她是用SSH Key
的方式在公司的Git
服务器授权的,然后她的Github
账号用的也是SSH Key
方式授权,而同一个SSK Key
是不能在两个平台上共用的(用户名和邮箱相同的除外),在理解为什么不能共用之前,先来看下如何生成SSH Key
。
SSH Key
:打开git bash
。然后输入命令:ssh-keygen -t rsa -C "你的邮箱"
。一顿下一步就可以了,密码都保留为空。
然后在当前登录用户的home
目录下找到.ssh
:C:\Users\hynev\.ssh
,打开id_rsa.pub
。
在github
的设置中,点击SSH and GPG keys
,在SSH Keys
的地方,点击Add New
,把id_ras.pub
中的文本,复制到里面去。
注意到没有,你在生成SSK Key
的时候,需要用到你的邮箱。一般我们在公司,都会有一个公司的内部邮箱,在Github
上,我们用的都是自己私人的邮箱。不同邮箱生成的SSH Key
是不同的,因此两个不同的Git
服务器是不能公用相同的SSH Key
的。那这时候怎么办呢?我们可以生成多个SSH Key
,针对每个Git
服务器都生成一个对应的SSH Key
不就可以了吗?是的,来干起来!
SSH Key
:多个SSH Key
生成方式跟之前的有点不一样。这里我们以Github
和Gitee
两个服务器为例,做个详细介绍。假如我在Github
上的邮箱是[email protected]
,在Gitee
上的邮箱是[email protected]
。
ssh-keygen -t rsa -C "[email protected]"
。然后回车。SSH Key
的路径和名称,我们填入id_rsa_github
。$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_github
id_rsa_github
和id_rsa_github.pub
。同样,gitee
的创建方式也一样,只不过在输入秘钥名称的时候,把id_rsa_github
改成id_rsa_gitee
就行了。
此时在本地就有四个文件(两个公钥和两个秘钥)。我们把这四个文件拷贝到当前用户的home
目录下的.ssh
中(比如/home/ubuntu/.ssh
或者C:\Users\hynev\.ssh
)。
生成了多个SSH Key
后,还需要写一个config
配置文件用来映射不同的Git
服务器与SSH Key
文件。继续来往下走。
SSH Key
文件:上一个步骤已经生成了多个SSH Key
,并且已经拷贝到.ssh
文件夹中了。然后我们就可以开始配置了。步骤如下:
.ssh
文件夹中创建config
文件。这个文件没有任何后缀。config
文件,然后输入以下代码:Host github.com
HostName github.com
User [email protected]
PreferredAuthentications publickey
IdentityFile C:\Users\hynev\.ssh\id_rsa_github
Host gitee.com
HostName gitee.com
User [email protected]
PreferredAuthentications publickey
IdentityFile C:\Users\hynev\.ssh\id_rsa_gitee
这里对以上代码做个简单介绍。其中Host
和HostName
填git
服务器的域名就可以。然后User
分别填在这两个服务器上注册时候的邮箱。PreferredAuthentications publickey
是固定写法,IdentityFile
则分别填对应的公钥文件名称。
3. 以上配置好后,再把私钥文件添加到SSH-Agent
中。执行命令如下:ssh-add id_rsa_github
以及ssh-add id_rsa_gitee
。如果执行的时候出现错误Could not open a connection to your authentication agent.
,那么先执行eval $(ssh-agent)
,再执行ssh-add
命令即可。
github
,那么命令为:ssh -T [email protected]
。如果提示Hi XXX! You've successfully authenticated, but GitHub does not provide shell access.
,则说明已经配置成功了。以上便已经成功配置了多个SSH Key
,在clone
、push
代码的时候,他会自动根据当前git
仓库配置的url
来选择不同的秘钥,就好像只有一个秘钥一样。
在我还没跟小学妹讲配置多个SSH Key
之前,她每次在公司都只能通过Http/Https
协议来授权,工作效率低,经常加班。自从我跟小学妹讲完如何配置多个SSH Key
后,小学妹已经开始有时间陪我去吃饭看电影了,准备考虑下长期的发展。老铁们,我是不是靠实力吃饭的?
Git
实际上是一个真的很好用的版本管理工具,学好可以给我们大大提高工作效率。但是很多人在刚用Git
的时候往往会遇到很多问题,想必你也遇到过:
Git
服务器,我不会!遇到这些问题怎么化解?其实都是Git
不会用导致的,今晚来我的直播间吧,我手把手教你如何正确使用Git
,让你代码管理清晰有序,和同事协作再也不会被吐槽了。对了,课程是免费的,扫码就可以进来学习了:
点击