对于有多个账户的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