snachx
V2EX  ›  问与答

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

  •  
  •   snachx · Aug 18, 2014 · 2708 views
    This topic created in 4371 days ago, the information mentioned may be changed or developed.
    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可能是怎么实现的啊?
    Supplement 1  ·  Aug 18, 2014
    自己找到了,Gitosis以及更强大的Gitolite就是专门做这个事情的。。。
    4 replies    2014-08-19 16:59:32 +08:00
    qq529633582
        1
    qq529633582  
       Aug 18, 2014
    我猜是自己造的sshd,实现了一个伪ssh协议
    snachx
        2
    snachx  
    OP
       Aug 18, 2014
    @qq529633582 自己找到了,Gitosis以及更强大的Gitolite就是专门做这个事情的。。。
    rrrrutdk
        3
    rrrrutdk  
       Aug 19, 2014   ❤️ 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
       Aug 19, 2014
    @rrrrutdk 谢谢,我也没仔细去研究怎么实现的,不过知道底层的时候肯定还是靠SSH的机制啦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   894 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:37 · PVG 04:37 · LAX 13:37 · JFK 16:37
    ♥ Do have faith in what you're doing.