【问题标题】:Running a “secure” git server over SSH without gitosis/gitolite?在没有 gitosis/gitolite 的情况下通过 SSH 运行“安全”的 git 服务器?
【发布时间】:2013-04-13 08:59:46
【问题描述】:

是否可以通过 ssh 运行 git 服务器,使用 authorized_keys 和 command= 来限制仅访问 git 存储库,而不使用 gitosis/gitolite?

【问题讨论】:

    标签: git ssh


    【解决方案1】:

    是的,将git shell 指定为所有用户的登录shell,这些用户只能拥有git 访问权限。

    【讨论】:

    【解决方案2】:

    编辑:不确定所有突然的负面排名;我显然不是说要使用 Gitolite 作为 OP 特别要求不要使用它。我只是说他要求的是 Gitolite 微小源代码的 95%,因此我告诉他在源代码的哪里可以找到他想要复制的 sn-p。


    是的,gitolite 正是这样做的。它也不会换出用户的 shell。

    cat ~/.ssh/authorized_keys
    command="/home/git/.gitolite/src/gl-auth-command jbruce",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAD3NzaC1yc2EABBBCIwAAAQEAtRFmADxUSCX97CS/Uh7/N0y0vL...
    

    请注意,这看起来不像服务器上的普通authorized_keys,它还将用户名作为参数传递,以便执行的脚本知道这个 ssh 密钥属于谁。不切换用户的 shell(同时仍然保持其安全)的另一个好处是,如果您尝试直接 ssh 进入机器,它不仅会终止会话,而且会告诉您在它终止之前您可以访问哪个存储库(如果它知道)你是谁。

    【讨论】:

    • 正如标题所示,我实际上宁愿避免使用 gito*。这是一个小项目,不需要这些工具提供的任何功能。
    • 大卫,重点是看看 gitolite 的做法,因为这正是您所要求的(authorized_keys 和 command=)。将用户名传递给 command= 是一个很酷的主意,因此您可以将用户与不仅仅是 ssh-key 相关联。选择你喜欢的部分,或者只是从中学习,然后从头开始。
    【解决方案3】:

    你可以把它放在authorized_keys2中每一行的开头:

    no-port-forwarding,no-agent-forwarding,command="/usr/bin/git-shell -c \"$SSH_ORIGINAL_COMMAND\"" 
    

    这将只允许通过 ssh 执行 git 命令,但如果您需要乱来(来自另一个帐户),您仍然可以成为该用户:

    sudo -u git -i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 2012-04-15
      • 2016-06-22
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      相关资源
      最近更新 更多