gitolite如何将远程用户映射到存储库用户?

时间:2012-10-19 17:19:25

标签: ssh key public gitolite


gitolite如何通过gitolite用户(repo用户)映射远程用户访问git??这是来自keydir中的公钥文件名吗?是否必须命名 公钥文件为 username.pub 。 感谢。

1 个答案:

答案 0 :(得分:2)

gitolite-admin repo中注册的公钥的名称用作~git/.ssh/authorized-keys文件中的参数(由gitolite在检测新用户时生成)推送gitolite-admin repo)

如果使用在该文件中注册的用户公共ssh密钥完成所述呼叫,则~git/.ssh/authorized-keys将在每个ssh呼叫上调用gitolite-shell。 对gitolite-shell的调用将使用用户名作为参数完成。

查看更多“how gitolite uses ssh”。

  

将用户限制在特定命令对于gitolite来说非常重要   如果您阅读 man sshd 并查找authorized_keys文件格式,您会看到许多可以添加到公钥行的选项,这会限制各种传入的用户方式。
  特别要注意command=选项,这意味着“无论传入用户要求做什么,都要强行运行此命令”。

     

另请注意,当authorized_keys文件中有许多公钥(即行)时,每行可以有一组不同的选项和命令=值。

     

如果没有这个命令=选项,ssh守护进程只会给你一个shell,这不是我们想要的gitolite键(虽然我们可能还有其他的键用于获取shell)。

注意:command=机制是ssh forced-command

forced command in ssh

  

这是使gitolite工作的支柱;请确保您理解这一点。

     

如果你查看authorized_keys文件,你会看到这样的条目(当然我切断了它们的结尾;它们很长):

command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t...
command="[path]/gitolite-shell usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...
  

首先,它会找出此文件中的哪些公钥与传入的登录相匹配   一旦找到匹配,它将运行该行给出的命令;例如,如果我登录,它将运行[path]/gitolite-shell sitaram   所以首先要注意的是这样的用户没有“shell访问”,这很好!

     

然而,在运行命令之前,sshd会设置一个名为SSH_ORIGINAL_COMMAND的环境变量,其中包含工作站发出的实际git命令。
  如果您在授权密钥文件中没有command=部分,那么这个命令就会运行。

gitolite-shell获得控制权时,它会查看第一个参数(“sitaram”,“usertwo”等)以确定您是谁。然后,它会查看SSH_ORIGINAL_COMMAND变量,以找出您要访问的存储库,以及您是在阅读还是写作。