突然想到一个 GitHub 库 SSH 访问的问题

2014-08-18 20:43:59 +08:00
 snachx
GitHub可以SSH克隆,只要上传了自己的ssh key就能push,但是GitHub的ssh remote是这种形式:

git@github.com:username/xxx.git,看起来其实就是git用户下面的username目录用来存放username所对应用户的所有repo.

所有的用户都是通过git这个帐号来ssh的,但是肯定username1不能往username2的库里面push吧,那GitHub是怎么区分不同用户的权限的呢?

放到一个普通的场景下,正常来说不是只要key认证通过,就可以以git用户的身份进行操作了么,还是说SSH本身就能支持设定不同的key有不同的权限?

GitHub可能是怎么实现的啊?
2205 次点击
所在节点    问与答
4 条回复
qq529633582
2014-08-18 20:59:27 +08:00
我猜是自己造的sshd,实现了一个伪ssh协议
snachx
2014-08-18 21:27:32 +08:00
@qq529633582 自己找到了,Gitosis以及更强大的Gitolite就是专门做这个事情的。。。
rrrrutdk
2014-08-19 10:57:51 +08:00
不是它们专门做这个事情,而是SSH。

一般某用户的ssh配置存在于$HOME/.ssh下。
其中有个特殊的文件:authorized_keys。

它每行记录一个public key;
它允许其中的public key对应的private key拥有者能通过key登录;
它同时允许在登录时执行相应的命令。

所以你上传一个public key,实际上就是在目标用户(一般为git)的authorized_keys中添加了类似的一行:

command="/var/lib/gitlab/gitlab-shell/bin/gitlab-shell key-28",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa ...

key-28其实就是你上传的public key对应的索引,通过它可以标识你。
snachx
2014-08-19 16:59:32 +08:00
@rrrrutdk 谢谢,我也没仔细去研究怎么实现的,不过知道底层的时候肯定还是靠SSH的机制啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/128610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX