一、写作目的
最近和小伙伴共用一台服务器,且共用系统用户。我们平时都是通过在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 |