1、安装 openssh和git
sudo apt-get install openssh-server openssh-client git-core
2、创建个人公钥和私钥
在默认用户的主目录路径下,运行以下命令,按照提示创建公钥和私钥
ssh-keygen -t rsa
3.配置openssh服务器
$vi /etc/ssh/sshd_config(本例此处不做任何配置即可) Port 22 # 修改成你想要的登陆端口,如2222 PermitRootLogin no # 禁止root用户登陆 StrictModes yes # 检查密钥的用户和权限是否正确,默认打开的 RSAAuthentication yes # 启用 RSA 认证 PubkeyAuthentication yes # 启用公钥认证 PasswordAuthentication no # 禁止密码认证,默认是打开的 ServerKeyBits 1024 # 修改后变为此状态,将ServerKey强度改为1024比特 PermitEmptyPasswords no # 修改后变为此状态,禁止空密码进行登录 $/etc/init.d/ssh restart
4、配置 git服务器
创建git服务器管理用户
sudo useradd -m git sudo passwd git
创建git仓库存储目录
sudo mkdir /home/git/repositories
设置git仓库权限
sudo chown git:git /home/git/repositories sudo chmod 755 /home/git/repositories
初始化全局设置
git config --global user.name "myname" git config --global user.email "myname@server"
5、安装python的setup tool
sudo apt-get install python-setuptools
6、获取并安装gitosis
cd /tmp git clone https://github.com/res0nat0r/gitosis.git cd gitosis sudo python setup.py install
7、配置gitosis
cp ~/.ssh/id_rsa.pub /tmp sudo -H -u git gitosis-init < /tmp/id_rsa.pub sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
8、管理gitosis配置
cd ~ git clone git@your_serverip:gitosis-admin.git cd gitosis-admin/
各个用户按照前面提到的办法生成各自的ssh公钥文件后,服务器管理员把所有人的 ssh公钥文件都拿来,拷贝到keydir目录下。
修改gitosis.conf文件,如下所示
[gitosis]
[group gitosis-admin] writable = gitosis-admin members = a@server1
[group developers] writable = helloworld members = a@server1 b@server2
[group test] readonly = helloworld members = c@server3
这个配置文件表达了如下含义:gitosis-admin组成员有a,该组对gitosis-admin仓库有读写权限; developers组有a,b两个成员,该组对helloworld仓库有读写权限; test组有c一个成员,对helloworld仓库有只读权限。 当然目前这些配置文件的修改只是在你的本地,你必须推送到gitserver上才能真正生效。 加入新文件、提交并push到git服务器:
git add . git commit -am "add helloworld project and users" git remote add origin ssh://git@your_serverip/helloworld.git git push origin master
9.添加新项目
好了,现在服务器已经搭建完了。并且有一个空的项目helloworld在项目上。接下来,当然是测试一下,空仓库是不能clone的。需要某一个有写权限的人去初始化一个版本。
cd ~ mkdir test echo "/*add something*/" > hello git init git add . git commit -am "init version" git remote add origin git@<server_ip>:helloworld.git git push origin master
本地测试
mkdir test1 git clone git@SERVER_HOSTNAME:helloworld.git10.添加新用户
假设我们要添加的用户为jeremy,那么需要创建key pair:
ssh-keygen -t rsa
假设生成的public key为~/.ssh/jeremy.pub
cd gitosis-admin
修改gitosis.conf,修改后为如下:
[group developers] writable = helloworld members = a@server1 b@server2 jeremy
注意.pub文件名和你要在members中添加的用户名以及.pub文件末尾的名字要完全一样。
拷贝jeremy.pub到keydir中:
cp ~/.ssh/jeremy.pub keydir/
把更改push到gitosis-admin.git:
git commit -a -m "添加jeremy到test仓库" git push
接下来把private key分发给jeremy,然后他就可以从自己的机器上进行clone了:
git clone git@SERVER_HOSTNAME:hellworld.git11.其他
如果SSH使用的不是22端口,那么请如下修改:
vi ~/.ssh/config Host myserver.com Port 2345
12.常见问题
ERROR:gitosis.serve.main:Repository read access denied
原因:gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub
注:windows下git服务器的搭建参考
http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/
参考文章:
http://wiki.ubuntu.org.cn/Git%E6%9C%8D%E5%8A%A1%E5%99%A8Gitosis%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE
http://weizhifeng.net/build-git-server-with-gitosis.html