用git替换gitolite3用户

我正在服务器上安装gitolite3,使用ssh和http进行拉取/推送/所有其他操作。在这个过程中,会创建一个名为gitolite3的用户和组。

当我运行:

$ ssh gitolite3@server info
我收到了带有RW仓库信息的正确gitolite3消息。 问题是,我想要使用常规用户git而不是繁琐的gitolite3,但又不想把它全部拆开。其他一些讨论中提到创建具有相同uid和gid的git用户,但这与上述结果不同。 当我登录时(使用传统的图形化登录界面),出现了我的常规管理员用户,以及一些方式下的gitolite3用户名(但我不确定这是gitolite3还是我创建的git用户别名)。 如何创建git用户/替换gitolite3用户,以便ssh git@server info可以与gitolite3一起工作?什么确定了用户何时可以使用登录界面登录,如何关闭此功能?

对于分发、桌面和环境的回应:我的操作系统是Centos 6.4,对默认的桌面环境没有进行任何根本性的改变。 - Florian Mertens
当你使用相同的uid和gid创建另一个用户时,你遇到了什么问题,更具体地说?对我来说,这似乎运行得很好。 - pst
5个回答

如果您尚未拥有git用户,并且基本上想要重命名默认的gitolite3用户,这可能相当容易。尝试以特权用户身份运行以下命令。

usermod -l git gitolite3
这将把gitolite3用户重命名为git。这样应该可以让ssh命令按照您的要求工作。
ssh git@hostname info

但这不会重命名其组和主目录,这可能也是所期望的。 - Ruslan

另一个回答提到创建一个具有相同UID和GID的新用户是正确的,但是它没有提供命令。这里是命令:
useradd --home-dir /var/lib/gitolite3 --gid gitolite3 --no-create-home --shell /bin/bash --uid $(id -u gitolite3) --no-user-group --non-unique git
这将使您能够享受使用发行版软件包管理器的好处,并且还可以作为SSH用户使用'git',而没有任何不利之处。

1这是最好的答案 - suprjami

添加具有相同的uid、gid和主目录的另一个用户。

你写道你已经看到建议这样做,"但是这不会得到与上面相同的结果"。我不知道你遇到了什么问题。也许你忘记设置相同的主目录。否则我就不知道了,因为这就是我的做法,而且它运行良好。

我使用一个rpm来创建和使用一个名为gitolite3的用户。我不想对rpm进行干扰,但在命令中不想使用那个冗长的用户名,所以我在/etc/hosts中复制了关于gitolite3的行,并在额外的行中使用git作为用户名。


你的问题是你不想输入名字,而不是名字本身。那就不要输入:
ssg () {

    ssh gitolite3@server $@
}
或者
alias ssg="ssh gitolite3@server $@"
将以下内容添加到你的`.bashrc`文件中,然后再次执行`source`命令,之后你只需输入`ssg info`即可。当然,你可以使用任何你想要的命令,只要不与其他命令冲突即可。 这样做有两个原因:首先,它比`ssh git@server info`还要更短;其次,我不喜欢更改这种默认名称,因为你无法确定系统中是否存在对该名称的硬编码依赖,除非有相关文档说明没有或者如何更改默认设置。 关于GUI登录的有效用户配置取决于你的发行版、桌面环境和显示管理器。

请参见上面的发行版。问题是,我想在一个相对较小的商业环境中使用这个服务器,但仍然足够大,以至于假设1)每个客户端可能不使用Linux,2)并非所有用户都会(想要)记住git用户实际上被称为gitolite3。因此,我非常热衷于采用最佳实践,即拥有一个“git”用户。此外,我完全同意硬编码依赖用户也让我感到担忧,因此某种程度上运作良好的“用户别名”似乎是最合适的解决方案。 - Florian Mertens
你可以在.ssh/config中使用Host servernameUser gitolite3。与别名不同,它将适用于大多数支持SSH的工具,如scp、rsync等。只需输入ssh server,它将使用配置中的名称。这并不能帮助解决这个问题,但比shell别名或函数更好的解决方案。 - Steven K

如果这是一个新的环境,我会像平常一样创建新的git用户,然后为该用户运行gitolite设置(忽略gitolite3用户)。 如果你真的想保留当前的gitolite配置/仓库等,完成后你可以将所有相关文件复制到该用户,并确保更新所有权信息,这样可能就能正常工作了(请查看gitolite文档,以防有关此过程的额外注意事项)。

你知道这个之前有没有做过吗?麻烦的是,我不知道用户gitolite3是如何创建的,或者使用了什么参数。看起来很简单,或者可以通过一些搜索解决,但我从来都不确定。 - Florian Mertens
之前有没有做过这个?在除了gitolite3之外的用户下运行gitolite?是的。绝对可以。gitolite一点也不在乎。我猜你的gitolite3用户是由一个(稍微奇怪的)gitolite软件包创建的。gitolite运行的用户没有任何特殊之处。它不需要特殊的用户或系统配置。gitolite网站上有一套非常简单和直接的步骤,用于在全新的系统/用户上设置gitolite。请参见这里这里的第1.4节。 - Etan Reisner
原来你的答案是最好的答案,尽管其他因素也会影响这个用户的创建。例如,如果你想让gitolite3可以通过httpd访问,官方脚本要求uid必须大于500,并且git gid也要符合要求。如果你想创建一个不同于默认的gitolite3用户和组,你可以使用以下命令创建新的用户和组: '# groupadd -g650 git # useradd -o -d/Server/Projects -u650 -g650 -s/bin/sh -M git',然后以该用户身份登录并运行gitolite设置。请注意,按照这种方式,git shell将停止工作。 - Florian Mertens
什么是官方脚本?为什么对于它来说 UID 很重要?这个改变会导致 git shell 停止工作吗(你是指 git shell 还是 gitolite shell)? - Etan Reisner
我所说的“官方”脚本是Thomas Hager在Gitolite网站上提供的支持脚本。当你说git shell或者gitolite shell时,我不确定有什么区别,我猜测应该是指gitolite shell。关于这个问题,我在这里提出了一个不同的问题 - Florian Mertens
我在那个脚本中没有看到任何表明它应该关心所讨论的用户的uid/gid的东西。你为什么认为它会呢? - Etan Reisner
你是正确的,那个脚本中没有提到这一点。然而,当apache suexec命令执行时,suexec会进行一系列安全检查,其中两个涉及检查用户是否不是系统用户,通过检查uid是否大于500,另一个检查组的gid是否大于100或500,具体取决于操作系统。不过,这超出了本问题的范围。 - Florian Mertens
我会相信你说的话。那么你的观点是,你不应该将git用户创建为系统用户(以防你可能认为应该这样做),因为那样行不通? - Etan Reisner