具有用户名和密码验证的 GIT 服务器

具有用户名和密码验证的 GIT 服务器

我想设置一个 GIT 服务器,让我的开发人员使用用户名和密码登录,以便提交和更改项目。我还需要管理开发人员对项目的访问权限(我认为我应该为此使用 gitolite)。

我怎样才能做到这一点?

我习惯使用 SVN,它很方便,因为您可以为每个开发人员设置用户名和密码,这样就可以轻松访问存储库,而无需生成 ssh 密钥并将其放在服务器上。

谢谢

答案1

也许您不知道这一点,但 Git 是一个分布式 VCS。这对您的理解至关重要。另一方面,SVN 和 CVS 是集中式的。您仍然可以在 Git 中拥有一个中央存储库,如果您这样做,您的用户将需要能够使用 SSH 或 HTTP 访问登录该服务器并查找它。一般来说,Git 依赖于服务器的身份验证。

因此,要在 Debian 或 Ubuntu 服务器上创建一个 git repo 以供集中使用:

# apt-get install git
# cd /var/git
# git init --bare myreponame.git
# adduser <username>    as needed

此时,您有一个空的存储库。要将其克隆到您的桌面 Debian 或 Ubuntu:

对于 SSH 连接:查找 ssh keygen 并与您的服务器建立无密码连接 - keygen 和共享只有两个命令。

要克隆 repo:

$ git clone <server>:/var/git/myreponame.git

$ cd myreponame

现在您可以添加文件和目录...当您使用 git add 和 git commit 后,您可以使用 git push 将提交推送到中央存储库。

  • 有非裸存储库,您必须阅读此内容,使用标准 Git 参考,只需 Google 即可。
  • 警告“共享存储库”并不是您从名称所想的那样。

答案2

gitolite使用公钥认证,并且,FWIW,您不需要生成每个人的密钥对。只需向他们索要公钥即可。

中的配置gitolite只是另一个存储库,您只需要授予访问权限并相应地添加公钥。

答案3

我想设置一个 GIT 服务器,让我的开发人员使用用户名和密码登录,以便提交和更改项目。我还需要管理开发人员对项目的访问权限

我建议使用 GitLab 社区版。因为它具有您需要的所有功能,甚至更多。

我习惯使用 SVN,它很方便,因为您可以为每个开发人员设置用户名和密码,这样就可以轻松访问存储库,而无需生成 ssh 密钥并将其放在服务器上。

实际上 ssh key 非常舒服,因为您不需要每次克隆/拉/推送/等时都输入登录名/密码。

无论如何,通过 gitlab 您都可以使用登录名/密码和/或 ssh 密钥。

答案4

如果您想要通过 SSH 进行密码验证并通过 Gitolite 进行授权,您可以轻松做到这一点。

基本上,您要做的就是为每个用户创建一个帐户,并将他们放入一个组中,或者将以下内容Match应用于所有用户,并对应该能够实际登录的用户进行例外处理。在我的示例中,我假设您将所有 git 用户都放入组git-users,主机名为git,Gitolite 以用户身份运行git,Gitolite 安装在/opt/gitolite。如果任何内容不正确,只需调整说明即可

/etc/ssh/sshd_config

Match Group git-users
    X11Forwarding no
    AllowTcpForwarding no
    AllowAgentForwarding no
    PermitTTY no
    ForceCommand sudo -u git -H /opt/gitolite/src/gitolite-shell $USER

如果有用户连接,则将控制权交给 Gitolite,并告诉它用户是哪个用户。

并且此sudo命令不需要密码就可以运行visudo,您可以在 sudoers 文件中添加

Defaults!/opt/gitolite/src/gitolite-shell       env_keep+=SSH_CONNECTION
Defaults!/opt/gitolite/src/gitolite-shell       env_keep+=SSH_ORIGINAL_COMMAND

转发Gitolite 正常运行所需的环境变量,SSH_CONNECTION以及SSH_ORIGINAL_COMMAND

%git-users      git = (git) NOPASSWD: /opt/gitolite/src/gitolite-shell

意思是让组中的每个用户都git-users可以在名为gituser 的主机上执行git无需指定密码的命令/opt/gitolite/src/gitolite-shell

相关内容