centOS搭建git服务器

250 阅读3分钟

     买的服务器尝试搭建git,开始想直接在服务器上装gitlab但是查阅资料说gitlab需要内存要在4G,买的简陋1核2G应该运行不起来,所以放弃了这个方法。然后查阅资料在服务器上搭了git服务,原文链接:www.cnblogs.com/fly\_dragon…

1. 系统环境

系统: Linux:CentOS 7.2 64位

由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装。

查看ssh版本

$ ssh -V

# 输出以下表示没问题,可以继续。 版本可能不一致,能用即可。
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

避免系统环境和其他的不一致,请核对您系统的版本,其他发行版请对应修改。

2. 安装git

建议以下操作都切换到root

# 请确保您切换到了root账户
$ su root
$ yum install -y git

# 验证是否安装成功
$ git --version
# 输出如下内容表示成功:
git version x.x.x.x

3. 添加git的管理的账户和设置密码

设置专门管理git的账号非必须,但是建议这么操作。(开始加了个账户没加密码,后来总提示密码错误我才想起来这里没设置,又回头重新设置的)

# 添加git账户
$ adduser git

# 修改git的密码
$ passwd git
# 然后两次输入git的密码确认后。

# 查看git是否安装成功
$ cd /home && ls -al
# 如果已经有了git,那么表示成,参考如下:
drwxr-xr-x.  5 root root 4096 Apr  4 15:03 .
dr-xr-xr-x. 19 root root 4096 Apr  4 15:05 ..
drwx------  10 git  git  4096 Apr  4 00:26 git

# 默认还给我们分配一个名字叫git的组。

4. git的权限管理

git仓库的权限管理,我们可以手动进行管理和配置,也可以通过其他辅助工具。如果小团队的话,直接通过ssh公钥进行管理即可,如果大点的团队,最好用gitolite 或者 gitosis,两者都差不多,一个是Perl开发,一个是Python开发。(原文两种方式都有,我无敌一人小团队只用ssh公钥管理了,如需另一种方式请看原文)

5. git的手动权限管理

经过以上步骤,其实服务器的基本已经配置好,但是需要设置权限和配置远程访问git仓库的方式。我们只介绍ssh的方式,https不做介绍。

5.1 配置服务端的ssh访问

切换到git账号,并创建ssh的默认目录和校验公钥的配置文件

# 1.切换到git账号
$ su git
# 2.进入 git账户的主目录
$ cd /home/git

# 3.创建.ssh的配置,如果此文件夹已经存在请忽略此步。
$ mkdir .ssh

# 4. 进入刚创建的.ssh目录并创建authorized_keys文件,此文件存放客户端远程访问的 ssh的公钥。
$ cd /home/git/.ssh
$ touch authorized_keys

# 5. 设置权限,此步骤不能省略,而且权限值也不要改,不然会报错。
$ chmod 700 /home/git/.ssh/
$ chmod 600 /home/git/.ssh/authorized_keys

此时,服务端的配置基本完成。接下需要把客户端的公钥拷贝到authorized_keys文件中。公钥我当时没有,顺便把公钥创建步骤放在文章最后,将公钥(id_rsa.pub)里的内容复制到刚刚创建的authorized_keys文件里就行。

5.2 服务器端添加客户端的SSH公钥

接着刚刚那步将公钥内容复制到authorized_keys后,就可以允许客户端ssh访问了。

到此为止,您配置的客户端应该可以ssh的方式直接用git账号登录服务器。(当然不安全,后面可以控制)

# 在客户端用ssh测试连接远程服务器,请将域名aicoder.com换成你的ip地址或者域名
$ ssh git@aicoder.com    

# 第一次连接有警告,输入yes继续即可。如果可以连接上,那么恭喜你的ssh配置已经可以了。 

5.3 服务器端创建测试git仓库

进入服务器的终端。

# 切换到git账号
$ su git
# 进入git账号的用户主目录。

$ cd /home/git
# 在用户主目录下创建 test.git仓库的文件夹

$ mkdir test.git  && cd test.git
# 在test.git目录下初始化git仓库

$ git init --bare
# 输出如下内容,表示成功
Initialized empty Git repository in /home/git/test.git/

git init --bare 是在当前目录创建一个裸仓库,也就是说没有工作区的文件,直接把git仓库隐藏的文件放在当前目录下,此目录仅用于存储仓库的历史版本等数据。

此时,客户端就可以进行clone或者remote add此仓库了。

5.4 客户端测试连接git远程仓库

客户端,可以新建一个文件夹,初始化一个仓库,然后跟远程服务器上的空仓库建立连接。

# 以下就是在客户端操作git的指令了,不必按照原文照搬了,只要能映射上就行了。
$ mkdir demos && cd demos
$ git init
$ touch a.txt
$ echo 'aicoder.com' >> a.txt

$ git add .
$ git commit -m 'the first commit'

# 把当前仓库跟远程仓库添映射
$ git remote add origin git@aicoder.com:test.git

# 把当前仓库push到远程仓库。
$ git push -u origin master

到此为止,我们就可以尽情的享用git私服了,但是!但是!但是!客户端可以直接ssh登录啊,这是bug,也是不安全的隐患,且看下面怎么禁用git账号的shell登录。(以下5.5我没有尝试,因为自己小破服务器也没啥隐患可言,并且要修改也需要密码)

5.5 禁止客户端shell登录

因为前面我们添加了客户端的ssh的公钥到远程服务器,所以客户端可以直接通过shell远程登录服务器,这不安全,也不是我们想要的。且看下面如何禁用shell登录:

第一步:
/home/git 下面创建git-shell-commands目录,并把目录的拥有者设置为git账户。可以直接用git账号登录服务器终端操作。

$ su git
$ mkdir /home/git/git-shell-commands

此文件夹是git-shell用到的目录,需要我们手动创建,不然报错:fatal: Interactive git shell is not enabled. hint: ~/git-shell-commands should exist and have read and execute access.

第二步:修改/etc/passwd文件,修改

$ vim /etc/passwd

# 可以通过 vim的正则搜索快速定位到这行,  命名模式下  :/git:x

# 找到这句, 注意1000可能是别的数字
git:x:1000:1000::/home/git:/bin/bash

# 改为:
git:x:1000:1000::/home/git:/bin/git-shell

# 最好不要直接改,可以先复制一行,然后注释掉一行,修改一行,保留原始的,这就是经验!!!
# vim快捷键: 命令模式下:yy复制行, p 粘贴  0光标到行首 $到行尾 x删除一个字符  i进入插入模式 
# 修改完后退出保存:  esc进入命令模式, 输入::wq!   保存退出。

好了,此时我们就不用担心客户端通过shell登录,只允许使用git-shell进行管理git的仓库。

如果有其他小伙伴要连接git服务器,仅需要把他的公钥也添加到authorized_keys即可。

最后加一个windows创建密钥的操作,很简单,百度就有jingyan.baidu.com/article/aa6…

  1. 已经安装好git客户端后,右键选择git bash here,打开git的命令行窗口

    如何生成git公钥

    如何生成git公钥

  2. 在git命令行窗口中输入cd ~/.ssh/,如果提示没有.ssh文件夹或目录,就创建该目录mkdir .ssh

    如何生成git公钥

  3. 然后输入2条命令:git config --global user.name “用户名”,git config --global user.email “邮箱”,分别配置用户名和邮箱,其中“用户名”可任意起,“邮箱”需为可用邮箱

    如何生成git公钥

  4. 再次输入命令:ssh-keygen -t rsa -C “刚刚输入的邮箱”,然后停顿处直接回车(总共3次)

    如何生成git公钥

  5. 5

    生成的秘钥就保存在刚刚的.ssh文件夹下,其中id_rsa.pub就是公钥

    如何生成git公钥

  6. 6

    该公钥文件的具体内容可以直接用记事本打开查看

    如何生成git公钥