ubuntu下搭建git服务器

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.git
10.添加新用户

假设我们要添加的用户为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.git

11.其他

如果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

解决:使keydir的名称与gitosis中members所指的名称一致。改为members = foo 或 公密名称改为foo@bar.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


原文地址:https://www.cnblogs.com/chengliu/p/3636350.html