ssh-key git多账户配置
2017-04-01 本文已影响0人
gofanelena
在使用git的时候,一般我们使用的远程Git服务器是github,这时只需简单的生成ssh-key密钥对并将公钥添加到github中就可以使用ssh了。
但在公司开发使用内部的git时,一般在gitlab,使用的邮箱一般是公司的邮箱,那么就需要配置多个ssh-key账户了。
假设user使用github的邮箱为user1@163.com;user2使用gitlab的邮箱为user2@163.com,下面是配置过程:
- 首先进入用户主目录下的.ssh文件夹,我们生成的密钥对放在这儿
$ cd ~/.ssh
- 分别为user1和user2生成密钥对:
默认三次回车生成key的名字为id_rsa,注意在生成第二个的时候不要使用默认名,否则会覆盖第一个,在以下位置为第二个输入名字
#新建SSH key
$ ssh-keygen -t rsa -C "user1@163.com"
$ ssh-keygen -t rsa -C "user2@163.com"
#设置user2的命名为id_rsa_work
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_work
此时在.ssh目录下就有两个密钥对文件id_rsa和id_rsa_work,我们将公钥分别拷至对应的Git服务器
- 添加key到SSH agent中:
此时还无法使用第二个服务器,因为Git会默认只读取到id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中:
$ ssh-add ~/.ssh/id_rsa
$ ssh-add ~/.ssh/id_rsa_work
如果出现Could not open a connection to your authentication agent的错误,就试着用以下命令:
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
$ ssh-add ~/.ssh/id_rsa_work
成功会显示:
Identity added: /c/Users/Windows用户名/.ssh/key名 (/c/Users/Windows用户名/.ssh/key名)
注意:ssh-add 这个命令不是用来永久性的记住你所使用的私钥的。实际上,它的作用只是把你指定的私钥添加到 ssh-agent 所管理的一个 session 当中。而 ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。
- 创建并配置config文件使配置永久生效:
在.ssh目录下新建一个文本文件,命令为config,不需要后缀,bash下可直接使用touch config,编辑以下内容:
# gitlab
Host gitlab的IP
HostName gitlab的Host //这里填你们公司的git网址即可
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_work
User user2
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
User user1
其规则就是:从上至下读取config的内容,在每个Host下寻找对应的私钥。按照你的情况修改就可以。
- 使用:如果之前有设置全局用户名和邮箱的话,需要unset一下,可通过
$ git config --list
来查看全局配置
$ git config --global --unset user.name
$ git config --global --unset user.email
可以在不同的仓库下设置局部的用户名和邮箱用不同的账号登录,比如在公司的repository下:
$ git config user.name "user2"
$ git config user.email "user2@163.com"
- 测试:
$ ssh -T git@github.com
#输出:Hi user1! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@gitlab的IP
#输出:Hi user2@163.com**, this is git@.....
测试成功。
如果出什么问题,可以通过ssh -vT git@github.com
来输出编译信息,然后根据编译信息去解决问题