一、写作目的
最近和小伙伴共用一台服务器,且共用系统用户。我们平时都是通过在GitHub
上设置SSH keys
的方式验证身份,但是~/.ssh
文件夹只有一个,按照以前的习惯配置,GitHub
总是识别为其中一个人,无法区分是谁在提交代码。本文基于此问题,将详细介绍SSH keys
的配置(连接GitHub
为例)。通过本文,您可以了解到:
- 如何生成RSA秘钥对
- 怎么通过SSH Keys连接Github
- 如何多人共用一个主机账户(多见于服务器场景),使用不同的
SSH keys
进行身份验证
本教程同时适用于Linux
和Windows
用户。
二、配置步骤
0. Windows用户需要额外安装Git Bash
,Linux用户跳过此步骤
Git Bash 64位官方下载地址:点击下载,默认安装即可。安装完毕后在开始菜单可以找到名为Git Bash
的应用,以管理员权限打开,如下:
Git Bash
几乎提供了Linux
一致性的操作,如果读者是Windows
用户,为了后续教程中指令继续可用,请尽量使用Git Bash
终端。
1. 生成RSA秘钥对
生成秘钥对时,我们会用到一些个人信息,下面我们假定:
1 | # 用户1 |
接下来我们需要进入~/.ssh
1 | cd ~/.ssh # 笔者电脑已经可以使用 ssh, 如果没有这个文件夹考虑apt-get安装一下ssh支持 |
生成user1的秘钥对:
1 | ssh-keygen -t rsa -C "user1@mail.com" |
类似的操作,我们生成user2的秘钥对,命名为id_rsa_user2:
1 | ssh-keygen -t rsa -C "user2@mail.com" |
至此我们得到了两个RSA秘钥对,其中*.pub
即公钥后面需要上传到GitHub;另一个对应的文件为私钥,存放在本地。
2. 配置多用户
在~/.ssh
上新建config
文件
1 | touch config |
编辑config
:
1 | vim config |
内容如下(读者使用时请删除内容中的中文注释,因为会引发报错!):
1 | # 当使用<user1.github.com>替换<github.com>进行访问时,ssh会自动识别为user1 |
3. 将公钥上传到GitHub
user1
和user2
分别将自己的公钥id_rsa_user1.pub
和id_rsa_user2.pub
上传到GitHub的SSH Keys即可。下面以user1
为例:
Title
的位置可以随意写,key
对应的内容,直接粘贴~/.ssh/id_rsa_user1.pub
内容即可:
然后就可以看到SSH Keys的位置多了一个条目
4. 测试可用性
回到Ubuntu系统,我们执行以下命令:
1 | ssh -T git@user1.github.com |
可以看到,成功通过user1
识别,且用户名是我的Github真实的用户名oneflyingfish
。user2
的配置类似,这里不再赘述。
这里还有个小技巧,如果是直接使用 git@github.com,那么ssh将自动识别为config列表的第一个用户,可以认为是单用户模式
三、使用SSH Keys
进行GitHub
访问
由于是多用户,所以在第一次clone一个GitHub地址的时候,需要简单的修改一下对应的域名,此时SSH将可以识别使用哪个用户进行操作,并建立配置记录。
1 | # 原始要clone的仓库命令 |
可以看到已经成功接收,即git的地址修改后是可以正常使用的。
然后我们对内容进行一点修改,然后上传上去
可以看到已经成功上传,且正确识别身份
注意:多用户共用情况下,如果提示设置用户名,一定要设置为局部信息
,而不是global
。命令应修改为:
1 | # git默认提示的命令 |
至此Ubuntu上配置已经完成。如果想继续了解git config
的使用,可阅读下一节内容
四、关于git config的一点补充
这部分仅作为参考指令,如果没有问题读者可以忽略这一节的内容。
查看一下git的当前配置信息:
1 | # 查看全局global配置 |
删除某个配置项:
1 | # 删除全局的user、email |
添加某个配置项:
1 | # 为全局添加user、email |