Git 通过 HTTP 协议进行身份验证的克隆
Git clone with authentication over HTTP protocol
我有一台带有 git 存储库的 centos 7 服务器,通过智能 http 共享,当我设置 "git push" 时,身份验证有效,但当我设置 "git clone" 时,身份验证无效。我想要比 Git 和 Apache 询问我的用户名和密码来克隆 repos。
/var/www/git -> 是我的回购目录
/var/www/html -> 是网站目录
我的site.conf是:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName miserver.com
DocumentRoot /var/www/html
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git /usr/libexec/git-core/git-http-backend/
<Directory /var/www/html/gitweb>
Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
<Directory /var/www/git>
DAV On
Options ExecCGI FollowSymLinks Indexes
AuthType Basic
AuthName "git repository"
AuthUserFile /var/www/git/.htpasswd
</Directory>
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /var/www/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
ErrorLog /var/www/html/error.log
CustomLog /var/www/html/access.log combined
您的配置使用与 git-receive-pack
匹配的 Require expr
。这是您推送到服务器时使用的服务。为了使服务器需要对克隆和提取进行身份验证,您还需要在 git-upload-pack
上进行匹配。
解决此问题的最简单方法可能是删除 Require expr
行,因为听起来您希望服务器始终应用身份验证,而不管您正在执行的任务如何。删除 Require expr
行会删除非推送操作的豁免。
我有一台带有 git 存储库的 centos 7 服务器,通过智能 http 共享,当我设置 "git push" 时,身份验证有效,但当我设置 "git clone" 时,身份验证无效。我想要比 Git 和 Apache 询问我的用户名和密码来克隆 repos。
/var/www/git -> 是我的回购目录 /var/www/html -> 是网站目录
我的site.conf是:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName miserver.com
DocumentRoot /var/www/html
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git /usr/libexec/git-core/git-http-backend/
<Directory /var/www/html/gitweb>
Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
<Directory /var/www/git>
DAV On
Options ExecCGI FollowSymLinks Indexes
AuthType Basic
AuthName "git repository"
AuthUserFile /var/www/git/.htpasswd
</Directory>
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /var/www/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
ErrorLog /var/www/html/error.log
CustomLog /var/www/html/access.log combined
您的配置使用与 git-receive-pack
匹配的 Require expr
。这是您推送到服务器时使用的服务。为了使服务器需要对克隆和提取进行身份验证,您还需要在 git-upload-pack
上进行匹配。
解决此问题的最简单方法可能是删除 Require expr
行,因为听起来您希望服务器始终应用身份验证,而不管您正在执行的任务如何。删除 Require expr
行会删除非推送操作的豁免。