多用户ssh-key对Github的访问控制

对于有多个账户的github用户来说,想方便快速的在多个用户之间切换而且不需要输入密码进行访问,最直接的主意无非就是去实现基于sshkey的目录控制。

  1. 使用ssh-key来访问;
  2. 能够实现基于不同的目录自动识别和选用对应的ssh-key;

网上不少相关的文章,但是总的来说比较零碎,老规矩为了备忘,整理如下.

生成与设置ssh-key

这其实是最简单的一步,首先要确认针对使用的终端机器,你成功创建并且在github网站上正确的注册了该key;官方文档就已经很清楚了,链接在此,不做赘述

无非就是生成、网站填入、本地ssh-agent注册三步而已;但是重点是,当针对多个用户时,你需要按照官网的说明,在不同的用户账户中生成和注册不同的key。

这一步完成之后,你应当在你的本机的目录中,存放了2个不同的key(假设用户A和用户B,并且目录就用.ssh),而且已经把这两个key都添加进了ssh-agent中;

  • ~/.ssh/A_rsa
  • ~/.ssh/B_rsa

配置多ssh连接

首先,我们需要在ssh的配置(~/.ssh/config) 中定义出‘场景’ ,即不同的用户对应的别名和key这些信息:

  1 # first.github (first@gmail.com)
  2 Host Auser
  3 HostName github.com
  4 User A
  5 IdentityFile ~/.ssh/A_rsa
  6
  7 # # second (second@gmail.com)
  8 Host Buser
  9 HostName github.com
 10 User B
 11 IdentityFile ~/.ssh/B_rsa

之后,就可以在每个对应rep工作目录里配置是用什么ssh配置来登陆了。

设置基于工作目录的不同ssh连接配置

重新生成目录

如果是全新的目录,那么在clone的时候,请注意使用如下的clone指令:

git clone ssh://git@github.com/<user>/<repository name>.git

修改目录的配置

目录生成之后,不管是按照上面的方法建立的,还是之前已经是使用了http的方式克隆过的,都请打开.git/config文件,检查url的部分, 把如同:

http方式建立:url = https://github.com/<user>/<repository name>.git

或者

git方式建立:url = git@github.com/<user>/<repository name>.git

改为:

url = git@<userscenarioname>:<user>/<repository name>.git

注意: 这里的userscenarioname是指的前面讲到的ssh配置中的Host名,例如Auser/Buser等等

使用

按照如上步骤之后,只要是在rep目录中操作的时候,就会按照.git/config中的这个别名去~/.ssh/config中找到对应的ssh host配置,读取不同的ssh key来进行访问和登陆,完全不用担心密码或者用户切换的问题。

当然如果过程中遇到其他奇奇怪怪的问题,类似ssh-agent启动与否等等,这些和多用户本身没有关系,还是建议针对具体问题具体查找了。

Fin

附另外一种做法

首先为2个账号分别生成密钥对:

ssh-keygen -t rsa -C 'myself_account@A.com' -f ~/.ssh/id_rsa_myself
ssh-keygen -t rsa -C 'mycompany_account@B.com' -f ~/.ssh/id_rsa_mycompany

将2个公钥id_rsa_myself.pub和id_rsa_mycompany.pub分别配置到github 修改ssh配置文件 ~/.ssh/config

Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa_myself
IdentitiesOnly yes
Host github-mycompany
HostName github.com
IdentityFile ~/.ssh/id_rsa_mycompany
IdentitiesOnly yes

将公钥配置到Git服务器,将密钥对加入ssh-agent:

ssh-agent bash
ssh-add ~/.ssh/id_rsa_myself
ssh-add ~/.ssh/id_rsa_mycompany

验证

ssh -T git@github.com ssh -T git@github-mycompany

可以连接的话,会返回消息

Hi XXX! You’ve successfully authenticated, but GitHub does not provide shell access.

使用

之后myself_account使用的时候,因为Host配置的github.com,可以正常使用,而mycompany_account账号clone的时候,要将github.com替换为github-mycompany

git clone git@github-mycompany:XXX/YYY.git

clone后注意配置下用户邮箱和名字就可以了。

06 Jul 2020 , 写毕。