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

Posted

技术标签:

【中文标题】gitolite 如何将远程用户映射到存储库用户?【英文标题】:How does gitolite map a remote user to a repository user ? 【发布时间】:2012-10-10 08:44:04 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

查看更多“how gitolite uses ssh”。

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

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

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

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

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

【讨论】:

Crsytal clear ,谢谢 VonC ,我将通过 sshd 手册页。

以上是关于gitolite 如何将远程用户映射到存储库用户?的主要内容,如果未能解决你的问题,请参考以下文章

将本地现有目录连接到现有 Git 远程存储库

git仓库迁移和更新远程仓库地址

第一次使用 Git 用户,推送到远程存储库需要很长时间

使用Gitolite搭建Git服务器

如何在远程存储库上使用 git bisect?

Git以错误用户身份推送到远程GitHub存储库