配置服务器
服务端SSH访问
首先,创建一个操作系统用户git
,并建立.ssh
目录。
sudo adduser git
su git
cd
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
接着需要为系统用户git
的authorized_keys
文件添加开发者SSH公钥。将开发者公钥加入到git用户的.ssh目录下的authorized_keys文件的末尾:
cat /tmp/id_rsa.xxx.pub >> ~/.ssh/authorized_keys
现在我们为开发者新建一个空仓库,可以借助带--bare
选项的git init
命令来做。该命令在初始化仓库时不会创建工作目录“
cd /opt/git
mkdir project.git
cd project.git
git init --bare
Git守护进程
对于快速且无需授权的Git数据访问,可以通过建立基于”Git“协议的守护进程仓库。因为不包含授权服务,任何通过该协议管理的内容将在其网络上公开。
git daemon --reuseaddr --base-paht=/opt/git/ /opt/git/
选项--reuseaddr
允许服务器在无需等待旧连接超时的情况下重启,--base-path
选项允许用户在为完全指定路径的条件下克隆项目,结尾的路径告诉Git守护进程从何处寻找仓库来导入。如果有防火墙,需要开放端口9418的通信权限。
接下来需要告诉Git哪些仓库允许基于服务器的无授权访问。可以在每个仓库下创建一个名为git-daemon-export-ok
文件来实现。
cd /path/to/project.git
touch git-daemon-export-ok
该文件将允许Git提供无授权的项目访问服务。
Smart HTTP
设置Smart HTTP一般只需要在服务器上启动一个Git自带的名为git-http-backend的CGI脚本,该脚本将读取由git fetch
或git push
命令向HTTP UTL发送的请求路径和头部信息,来判断该客户端是否支持HTTP通信。如果CGI发现该客户端支持Smart模式,他将会以Smart模式进行通信,否则它将会回落到Dumb模式。
在完成以上的安装步骤后,我们可以用Apache作为CGI服务器。在Apache的配置文件中添加一些内容,让git-http-backend
作为Web服务器对/git
路径请求的处理器。
SetEnv GIT PROJECT ROOT /opt/git
SetEnv GIT HTTP EXPORT ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
如果留空GIT_HTTP_EXPORT_ALL
这个环节变量,Git将只对无授权客户端提供带git=daemon-export-ok
文件的版本库,就像Git守护进程一样。
在Apache配置文件中添加如下内容,让Apache接受通过该路径的请求:
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
最后如果想实现写操作授权验证,使用如下的未授权屏蔽配置即可:
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /opt/git/.htpasswd
Require valid-user
</LocationMatch>
这时需要创建一个包含所有合法用户密码的.htaccess
文件,一下时添加”schacon”用户到此文件的例子:
htdigest -c /opt/git/ .htpasswd "xxx" schacon