对于有多个账户的github用户来说,想方便快速的在多个用户之间切换而且不需要输入密码进行访问,最直接的主意无非就是去实现基于sshkey的目录控制。
- 使用ssh-key来访问;
- 能够实现基于不同的目录自动识别和选用对应的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后注意配置下用户邮箱和名字就可以了。