2

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

4

1 回答 1

2

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

~git/.ssh/authorized-keys 如果该调用是使用在该文件中注册的用户公共 ssh 密钥完成的,那么这 将在每个 ssh 调用上调用 gitolite-shell。
该调用gitolite-shell将使用用户名作为参数来完成。

查看更多“ gitolite 如何使用 ssh ”。

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

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

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

注意:该command=机制是ssh 强制命令

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变量以找出您要访问的存储库,以及您是在阅读还是在写作。

于 2012-10-19T17:36:27.830 回答