2014-06-27 69 views
1

我有我自己的私人Linux服务器。我使用它来托管我所有的公司git仓库。我正在使用python来阅读.git目录。我还有一个数据库,其中包含一些信息,例如允许登录到系统的用户。为服务器上的git存储库添加一层认证

现在的问题,我有一个名为git的Linux用户。用户拥有所有的存储库,当我尝试从外部机器连接时,我必须在拉和推之前将SSH密钥上传到服务器。

我现在要做的是创建一个像github这样的认证层。通过输入系统的用户名和密码,用户可以克隆或推送到私人存储库。由于用户名和密码在数据库中,我需要一个python脚本或任何其他脚本来获取用户名和密码。

现在的问题,当用户试图这样做的时候.. git push origin master第一次。并没有SSH密钥。如果用户使用我数据库中的数据进行身份验证,并且有权访问此存储库,那么我需要他/她能够推送回购或克隆它,我需要说些什么Please enter your username and password

请不要提供现成的软件来托管git存储库。这不适合我。

回答

2

既然你有SSH访问,你可以添加一个authorization layergitolite这将允许您:

这样,不需要一个用户数据库,并且您可以管理您的整个用户基础和来自gitolite-admin回购的访问规则,这是一个特殊的行政管理epo这将在服务器端由gitolite解释。

查看更多的“How do programs like gitolite work?”。

+0

首先,谢谢。但是Github,Heroku和其他许多允许用户从服务器上推/拉的平台并不依赖于SSH密钥。如果你在github上有一个私人回购站,你将能够在Github中只使用你的用户名和密码克隆它,这些用户名和密码已经存储在他们的数据库中。这真的是我的问题。我的PostgreSQL数据库中有用户,我需要为他们提供将服务器用作Git服务器的权限。在访问.git repo之前,您需要有一个脚本,它将会转到数据库或文件来检查权限。你有什么建议? – Othman

+0

@奥斯曼我仍然建议gitolite,但是有一个Apache前端。 http://stackoverflow.com/a/21303301/6309。除了代替Apache对LDAP进行身份验证之外,它可以针对PostgreSQL进行身份验证(http://www.graphica.com.au/postgres-and-apache.html或http://www.giuseppetanzilli.it/mod_auth_pgsql2/) – VonC

+0

因此,我使用apache从我的数据库验证用户(OK)。如果有人想使用SSH密钥,我需要修改'gitolite-admin'回购和该文件的密钥。如果用户拥有SSH密钥,apache会忽略认证,因为即使我在服务器中有SSH密钥,要求输入用户名和密码也很愚蠢吗?如果是的,谢谢。 – Othman