Ubuntu搭建Git服务器

前端之家收集整理的这篇文章主要介绍了Ubuntu搭建Git服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

安装Git

我的Ubuntu版本是:

cai@ubuntu02:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

我使用的是普通用户的帐号cai登录后目录是:

cai@ubuntu02:~$ pwd
/home/cai

安装git:

cai@ubuntu02:~$ sudo apt-get install git
......
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn
The following NEW packages will be installed:
  git
......
cai@ubuntu02:~$ git --version
git version 2.7.4
也可是使用 sudo apt-get install gitcore命令来安装git。廖雪峰老师的Git教程也提到了原因:以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git

添加用户git,该用户将作为所有代码仓库和用户权限的管理者(-m表示manager),并设置该用户的密码:

cai@ubuntu02:~$ sudo useradd -m git
cai@ubuntu02:~$ sudo passwd git
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

建立一个git仓库的存储点,并且设置权限使除了git以外的用户对此目录无任何访问权限:

cai@ubuntu02:~$ sudo mkdir /home/git_repo
cai@ubuntu02:~$ sudo chown git:git /home/git_repo
cai@ubuntu02:~$ sudo chmod 755 /home/git_repo
chmod 755的含义:3个数字分表表示 文件所有者的权限、 文件所有者同属一个用户组的其他用户的权限、 其它用户的权限。而权限分为三种:读(r=4),写(w=2),执行(x=1) 。 综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。所以 chmod 755表示文件所有者有rwx权限,同一用户组的其他用户有rx权限,其他用户组有rx权限。

安装Gitosis

Gitosis是用来管理公钥的。如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就行了。但是如果是很多人的团队,可以用Gitosis来管理公钥。

cai@ubuntu02:/home/git$ apt-get install python-setuptools
cai@ubuntu02:/home/git$ cd ~
cai@ubuntu02:~$ sudo git clone https://github.com/res0nat0r/gitosis.git
cai@ubuntu02:~$ cd gitosis
cai@ubuntu02:~/gitosis$ sudo python setup.py install

由于Gitosis默认会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/git_repo:

cai@ubuntu02:/home$ sudo ln -s /home/git_repo /home/git/repositories

在服务器端生成ssh公钥:

cai@ubuntu02:~$ cd ~
cai@ubuntu02:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cai/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/cai/.ssh/id_rsa.
Your public key has been saved in /home/cai/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1X0QlMjs+OMI2fqWaMxmV0kONg0BWlfe0wMzBV8JF0U cai@ubuntu02
The key's randomart image is:
+---[RSA 2048]----+
|        o.o=.OBBE|
|       o ..o+oB+.|
|      .   .=o +oo|
|         .= +  o.|
|        S+ * .   |
|        o . *    |
|       o + = .   |
|        O = .    |
|       + +.      |G
+----[SHA256]-----+

用刚生成公钥id_rsa.pub(/home/cai/.ssh目录下)来对Gitosis进行初始化:

cai@ubuntu02:~/.ssh$ sudo chmod a+r /home/cai/.ssh/id_rsa.pub
cai@ubuntu02:~/.ssh$ sudo -H -u git gitosis-init< /home/cai/.ssh/id_rsa.pub
Initialized empty Git repository in /home/git_repo/gitosis-admin.git/
Reinitialized existing Git repository in /home/git_repo/gitosis-admin.git/
cai@ubuntu02:~/.ssh$

gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一个post-update文件添加可执行的权限:

cai@ubuntu02:/home/git_repo$ sudo chmod 755 /home/git_repo/gitosis-admin.git/hooks/post-update

使用Gitosis管理用户操作项目的权限

首先需要在前面生成ssh公钥(用来初始化gitosis)的机器(Ubuntu)上将gitosis-admin.git的仓库clone下来。

然后在我本机(Win7,本机也要装git才能clone哦)上新建一个目录用于存放gitosis-admin.git仓库。

clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用于认证请求的客户端机器。

git clone git@192.168.86.20:/home/git_repo/gitosis-admin.git

操作如下图(会提示输入密码,就是前面自己设置的git用户的密码):

客户端机器上生成ssh key:

cd /d/gitgitgit/gitadmin/gitosis-admin/keydir
ssh-keygen -t rsa -f caibaohong.pub -C "caibaohong@outlook.com"

-t指定签名的类型,-f指定公钥名称 -C表示注释,操作如下图:

将客户机公钥copy到keydir目录下,在gitosis.conf里配置权限,并推送服务器:

$ cd /d/gitgitgit/gitadmin/gitosis-admin
$ cp ~/.ssh/id_rsa.pub keydir/caibaohong.pub    
$ vi gitosis.conf

添加用户权限,注意这里的members指定的用户名,必须与前面生成的公钥的命名一样。caibaohong.pub ---> members=caibaohong :

[gitosis]

[group gitosis-admin]
members = cai@ubuntu02
writable = gitosis-admin
[group write]
members = caibaohong
writable = hello-project

提到到服务器端的gitosis-admin仓库:

$ git status
$ git add .
$ git commit -m "add user caibaohong with write privilege"
$ git push

在服务器/home/git/repositories下新建一个仓库hello-project(记得要修改目录的权限):

cd /home/cat/repositories
sudo mkdir hello-project
cd hello-project
git init
cd ..
sudo chown -R git:git hello-project

克隆到客户端机器上,注意,需先删除~/.ssh目录,因为刚才可能gitosis-admin存了这个工程对应的公钥,现在下载hello-project,需要在~/.ssh目录存caibaohong.pub这个公钥,如果不删除,就会校验出错。提示ERROR:gitosis.serve.main:Repository read access denied,具体操作(在win7上):

$ rm -rf ~/.ssh
$ cd /d/gitgitgit/gitadmin
$ git clone git@192.168.86.20:/home/git/repositories/hello-project
Cloning into 'hello-project'...
The authenticity of host '192.168.86.20 (192.168.86.20)' can't be established.
ECDSA key fingerprint is SHA256:XbO6oTfugZQ8rGIA2Kz3hCh1sV1+dg9QD+DX++gaE+s.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.86.20' (ECDSA) to the list of known hosts.
git@192.168.86.20's password:
warning: You appear to have cloned an empty repository.

$ ls
gitadmin/  hello-project/

本地提交文件来测试一下:

vi test.txt
git add .
git commit -am "add a test.txt"
git push origin master

猜你在找的Ubuntu相关文章