基于Debian Linux搭建Git服务器

    因为一些众所周知的原因,某些项目不适合开源(代码写的烂我会乱说?(╯﹏╰)b )。又因为博主不是壕,买不起Github的私有空间,所以只能利用手头上的Debian服务器搭建Git服务器咯~


安装Git

    要搭建Git服务器,第一步当然是要安装Git了,键入以下命令来完成Git的安装:

1
sudo apt-get install git

新建Git用户

    出于安全的原因考虑,我们肯定是不会使用root或者其它具有完整的shell执行权限的用户来运行Git的。因此,我们需要创建一个git用户来运行git服务。

键入以下命令来完成git用户的创建:

1
sudo adduser git

创建用户的途中会要求输入用户密码,这个密码请务必记住,这个密码的作用我们后面再说。git用户的其它配置使用默认值直接回车就行。

禁用shell登录

git用户创建完成之后,系统默认是为其分配的bash的,我们不希望git用户拥有shell执行权限,因此我们需要更改git用户的默认shell,使其不允许登录shell。

我们可以通过编辑/etc/passwd文件来完成对git用户shell的更改。

键入以下命令编辑/etc/passwd文件:

1
vim /etc/passwd

找到类似下面的一行(一般在文件的末尾):

1
git:x:1000:1000:,,,:/home/git:/usr/bin/bash

修改为:

1
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

如果你不确定git-shell是不是在/usr/bin/git-shell这个位置的话,可以使用以下命令来查看git-shell的路径:

1
which git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

Git密钥登录

既然是私有Git服务器,当然必要的pushpull以及clone等操作不能让其他未经允许的人使用了。当然,我们也不想每次进行远程仓库操作的时候都输入git用户的密码。

因此,通过ssh密钥证书的方式就很有必要了~

  • 如同Github导入公钥一样,首先收集授权访问用户的公钥文件,也就是他们的id_rsa.pub文件。
  • 复制id_rsa.pub文件其中全部的内容。
  • id_rsa.pub文件其中全部的内容导入到Git服务器的/home/git/.ssh/authorized_keys文件中,每一行导入一个公钥文件。

如果没有/home/git/.ssh/authorized_keys文件,请执行以下命令自行创建:

1
2
3
4
cd /home/git
mkdir .ssh
cd .ssh
touch authorized_keys

这样,凡是添加了公钥到/home/git/.ssh/authorized_keys文件的用户都能够正常的使用远程仓库的常用操作了,如果Git公钥没有被添加到/home/git/.ssh/authorized_keys文件中又想执行远程仓库的操作的话,那么就需要用到上面git用户的密码了,因为git会要求输入Git服务器的git用户的密码。这就是上面设置git用户密码的作用了~

初始化服务器Git仓库

上面的准备工作做完,就需要在Git服务器上选定一个目录作为Git仓库了。假定我们选择/gitserver/Demo.git作为Git仓库,那么我们首先需要执行以下命令创建/gitserver目录:

1
2
3
cd /
mkdir gitserver
cd gitserver

然后进入gitserver目录,执行以下命令:

1
sudo git init --bare demo.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为Git服务器上的Git仓库主要是为了共享,所以不让用户直接登录到Git服务器上去修改工作区。

Git服务器上的Git仓库通常都以.git结尾。

修改Git仓库owner

创建好仓库之后,我们需要将仓库的owner设置为git用户,不让我们前面为git用户所做的配置就没啥意义了~

执行以下命令,修改仓库的owner:

1
sudo chown -R git:git demo.git

克隆远程仓库

现在就可以通过git clone命令克隆Git服务器上的demo仓库了,在各自的PC上执行以下命令以完成克隆:

1
2
3
$ git clone ssh://[email protected]:/gitserver/demo.git
Cloning into 'demo'...
warning: You appear to have cloned an empty repository.

其中需要注意的是:

  • 上述命令git clone ssh://[email protected]:/gitserver/demo.git中,SERVER的值为你的服务器的ip地址或者域名
  • 如果你的服务器更改了默认的ssh端口号,那么需要在地址中指出,像这样:
1
$ git clone ssh://[email protected]:PORT/gitserver/demo.git

其中PORT即为更改之后的ssh端口号。

例如,博主对服务器做了A记录的域名解析,也更改了默认端口号为9669,那么执行的克隆地址的命令即为:

1
$ git clone ssh://[email protected]:9669/gitserver/demo.git

后面的操作不用我多说,大家也都懂的了~

0%