问题说明
当有多个git账号的时候,比如一个github,用于自己进行一些开发活动,再来一个gitlab,一般是公司内部的git。这两者你的邮箱如果不同的话,就会涉及到一个问题,生成第二个git的key的时候会覆盖第一个的key,导致必然有一个用不了。
解决方法
我们可以在~/.ssh
目录下新建一个config
文件配置一下,就可以解决问题
具体步骤:
1. 生成ssh key
-
生成第一个ssh key(这里我用的是公司的邮箱)
进入C:\Users\用户名.ssh
,点击鼠标右键-选择Git bash here
,这一步很重要,不然在下面输入密钥名称的时候,会将密钥生成在当前打开git bash
的路径下,比如我在桌面打开的git bash
,就会生成在桌面上:ssh-keygen -t rsa -C "yourmail@example.com"
在输入文件名及路径的时候,生成的密钥命名为
id_rsa_gitlab
,下面连续回车。(是否给密钥设置密码这个就看个人需求了)$ ssh-keygen -t rsa -C "yourmail@example.com" Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/李锋镝/.ssh/id_rsa): id_rsa_gitlab Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa_gitlab Your public key has been saved in id_rsa_gitlab.pub
-
生成第二个ssh key(这里用的我的GitHub邮箱),步骤同上
ssh-keygen -t rsa -C "yourmail@qq.com"
这里生成的密钥命名为
id_rsa_githab
:$ ssh-keygen -t rsa -C "yourmail@qq.com" Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/李锋镝/.ssh/id_rsa): id_rsa_githab Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa_githab Your public key has been saved in id_rsa_githab.pub
2. 执行ssh-agent命令
ssh-agent
就是一个密钥管理器,运行ssh-agent
以后,使用ssh-add
将私钥交给ssh-agent
保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent
来完成整个认证过程。
ssh-agent
或者执行行如下命令:
exec ssh-agent bash
eval ssh-agent -s
3. 添加私钥,执行下面命令:
ssh-add ~/.ssh/id_rsa_github
ssh-add
4. 创建并修改config文件
创建config
文件,将文件创建在.ssh
目录下:
两种方法:
- 在windows下新建一个txt文本,然后将名字改成config(包括.txt后缀)
- 在git bash下,直接touch config即可创建一个config文件
配置内容如下:
# gitlab
Host gitlab.example.com
HostName gitlab.example.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_kuaidao
User lifengdi
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
User lifengdi
配置文件说明:
每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可。
Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令。
例如:
Host mygithub 这样定义的话,命令如下,即git@后面紧跟的名字改为mygithub
git clone git@mygithub:lifengdi/example.git
就相当于你配置的HostName真正的域名,映射成了Host后面的配置的名字
HostName #这个是真实的域名地址
IdentityFile #这里是id_rsa的地址
PreferredAuthentications #配置登录时用什么权限认证--可设置publickey,password publickey,keyboard-interactive等
User #配置使用用户名
5. 将公钥添加到gitlab或者github上
.pub
结尾的就是公钥,将其配置到git上的SSH keys
即可。
测试密钥是否生效
输入如下代码:
# github
ssh -T git@github.com
# gitlab
ssh -T git@gitlab.example.com
显示:
# github(successfully表示就是成功了,如果有警告之类的,无视就行)
Hi lifengdi! You've successfully authenticated, but GitHub does not provide shell access.
# gitlab
Welcome to GitLab, lifengdi!
说明配置成功。