V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
snachx
V2EX  ›  问与答

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

  •  
  •   snachx · 2014-08-18 20:43:59 +08:00 · 2157 次点击
    这是一个创建于 3545 天前的主题,其中的信息可能已经有所发展或是发生改变。
    GitHub可以SSH克隆,只要上传了自己的ssh key就能push,但是GitHub的ssh remote是这种形式:

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

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

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

    GitHub可能是怎么实现的啊?
    第 1 条附言  ·  2014-08-18 21:27:53 +08:00
    自己找到了,Gitosis以及更强大的Gitolite就是专门做这个事情的。。。
    4 条回复    2014-08-19 16:59:32 +08:00
    qq529633582
        1
    qq529633582  
       2014-08-18 20:59:27 +08:00
    我猜是自己造的sshd,实现了一个伪ssh协议
    snachx
        2
    snachx  
    OP
       2014-08-18 21:27:32 +08:00
    @qq529633582 自己找到了,Gitosis以及更强大的Gitolite就是专门做这个事情的。。。
    rrrrutdk
        3
    rrrrutdk  
       2014-08-19 10:57:51 +08:00   ❤️ 1
    不是它们专门做这个事情,而是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
        4
    snachx  
    OP
       2014-08-19 16:59:32 +08:00
    @rrrrutdk 谢谢,我也没仔细去研究怎么实现的,不过知道底层的时候肯定还是靠SSH的机制啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2229 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:41 · PVG 10:41 · LAX 19:41 · JFK 22:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.