CentOS 7下搭建 Git 服务器

本文将介绍如何在 CentOS 7 下搭建最新版本的 Git 服务器以及通过证书验证和口令验证两种方式访问 Git。

一. CentOS 7 安装最新版的 Git服务器

1. 查看 yum 仓库中的 Git 信息

# yum info git


可见yum仓库中的Git的版本是1.8.3.1,但是Git官网上最新的版本已经到了2.17.0目前(可以通过 https://github.com/git/git/releases 查看当前最新的 Git 版本信息)。所以要想安装最新版本的 Git 服务器,只能通过下载源码进行安装。

2. 安装依赖库

# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# yum install gcc perl-ExtUtils-MakeMaker

3. 从 yum 中卸载低版本的 Git

# yum remove git

4. 下载最新版本的 Git 源码

比如想将下载的最新的 Git 源码放在 /usr/local/git 目录下:

① # cd /usr/local

② 在 /usr/local 下创建 git 文件夹:# mkdir git

③ # cd git

④ 下载:

(在线下载)# wget https://github.com/git/git/archive/v2.16.3.tar.gz

(离线下载)有时因为网络的原因,导致在下载到中途的时候连接关闭而无法正常写入 v.2.16.3.tar.gz。这时可以在浏览器中输入 https://github.com/git/git/archive/v2.16.3.tar.gz,先将包下载到本地,然后从本地传到服务器的 /usr/local/git 下。

如果你是 Windows 系统的话,可以直接通过 WinSCP 工具从本地直接拖拽到服务器相应目录;

如果你是 Mac 系统的话,可以通过如下命令(假设离线包下载到了 Downloads 下):

则首先要进入 Downloads:$ cd Downloads

然后 scp v.2.16.3.tar.gz root@x.x.x.x:/usr/local/git 

更多 Linux 系统和 Mac 本地文件如何传输,参考: 

https://jingyan.baidu.com/article/93f9803f30babee0e46f55eb.html

5. 解压

# tar -xzvf v2.16.3.tar.gz

6. 安装 Git

cd git-2.16.3 

v2.16.3.tar.gz 解压之后的文件是 git-2.16.3,所以进入 git-2.16.3。

② # make prefix=/usr/local/git all

③ # make prefix=/usr/local/git install

7. 添加到环境变量

① # vim /etc/profile 输入 i 进入编辑模式

② 添加 export PATH="/usr/local/git/bin:$PATH" ,输入 ESC,然后输入 :wq 保存退出。

③ # source /etc/profile 使配置立即生效

8. 查看是否安装成功

# git --version

输出 git version 2.16.3。到现在为止,在 CentOS 7 上最新的 Git 就安装成功了。

9. 设置 git 的默认路径,建立链接

# ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack 

# ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack 

-----------------------------------------------------------------------------

提示:

在 clone 的时候可能会遇到:'bash: git-upload-pack: command not found' 'fatal: The remote end hung up unexpectedly' 的错误,原因是因为在服务器上,Git 的安装路径是 /usr/local/git,不是默认路径,所以需要建立如上链接。当然,如果无法修改 Git 服务器上配置,可以在 clone 时,添加 --upload-pack 选项来指定 Git 服务器上的 git-upload-pack 路径,达到上面相同的目的(eg:git clone --upload-pack "/usr/local/git/bin/git-upload-pack" root@x.x.x.x:/root/code.git)。遇到 git-receive-pack 的错误,同样是因为这个原因,建立链接文件就可以了。

-----------------------------------------------------------------------------

二. 在 Git 服务器上创建用户组和用户

创建组:# groupadd 组名 

eg: # groupadd git

创建用户:# useradd 用户名 -g 组名 

eg: # useradd git -g git

创建密码: # passwd 用户名 

eg:# passwd git

-----------------------------------------------------------------------------

提示:

创建完用户后会在 /home 目录下生成一个以用户名为名的目录,可以通过 -d 设置用户登录的主目录位置(eg:useradd user01 -d /usr/user01 -g git)。如果不想为用户建立目录,可以在建立的时候用 -M 命令;

创建的账户保存在 /etc/passwd 中;

删除用户:# userdel 用户名。如果想连用户目录一块删除的话,可以使用 # userdel -f 用户名。

-----------------------------------------------------------------------------

三. 访问 Git 方式一:通过证书访问

1. 初始化

例如想将仓库建在 /home/git 下

cd /home/git 

② # git init --bare test.git

如果先 su - g 切换到 git 用户建,默认会建到 git 用户所在的文件夹下。

2. 在 Git 客户端生成公钥

Mac 上 公钥的生成:

ssh-keygen -t rsa -C "YourEmal@163.cn"

这时会询问 key 的保存路径和密码,如果这时设置了密码,在进行提交等操作的时候会让输入刚设置的密码。如果不需要设置这些的话,一路回车就可以了。

完成之后会生成两个文件,一个公钥 id_rsa.pub,一个私钥 id_rsa。

默认目录在 /Users/xxx/.ssh,执行 cat .ssh/id_rsa.pub 可以查看生成的公钥的内容。

Windows 上公钥的生成:

ssh-keygen -t rsa

3. 在 Git 服务器上打开 RSA 认证

# vim /etc/ssh/sshd_config

修改里面的内容为:

RSAAuthentication yes  

PubkeyAuthentication yes  

AuthorizedKeysFile /home/git/.ssh/authorized_keys #你的authorized_keys所在路径 

4. 将客户端生成的公钥添加到 authorized_keys 中

① # cd /home/git/   

② # su - git 

切换用户为git,保证 .ssh 和 authorized_keys 文件的所有者都是 git。再切换到 root 用户时输入 exit。

③ 新建 .ssh 文件夹并赋权限

# mkdir .ssh   

# chmod 700 .ssh   

④ 新建 authorized_keys 文件,用来存放客户端的公钥。

# touch .ssh/authorized_keys   

# chmod 644 .ssh/authorized_keys  

⑤ 添加公钥到 authorized_keys

vim .ssh/authorized_keys

将客户端生成的公钥内容拷贝到 authorized_keys 里,多个用户多个公钥,每行一个。

5. 客户端 clone 进行验证

git clone git@x.x.x.x:test

clone,push 等操作不需要输入密码。

四. 访问 Git 方式二:通过用户名/密码访问

1. 初始化

例如想将仓库建在 /home/Project

cd /home/Project

② # git init --bare test.git

2. 修改 /etc/ssh/sshd_config

# vim /etc/ssh/sshd_config

修改为:

#RSAAuthentication yes

#PubkeyAuthentication yes

#AuthorizedKeysFile /home/git/.ssh/authorized_keys

PermitEmptyPasswords no

PasswordAuthentication yes

3. 新创建一个用户并设置密码

# useradd user01 -g git

# passwd user01

4. 客户端 clone 进行验证

git clone ssh://user01@x.x.x.x/home/Project/test.git

需要输入密码才能进行 clone。

5. 客户端 push 进行验证

进入到本地下载的程序目录,添加一个文件。然后

git add .

git commit -m "init"

git push origin master

-----------------------------------------------------------------------------

提示:

在 push 的时候可能会报 'remote unpack failed: unable to create temporary object directory To ...' 或 'git push error: remote unpack failed' 这类的错,执行 git branch -a 的时候,发现远程分支 master 不存在。因为在 push 的时候,如果远程分支不存在,则会创建远程分支,但是这里没有被创建,很可能的原因就是权限不足。所以进入到 /home/Project,执行 chmod -R 777 /test.git 后,再次 push 就没有问题了。还有另一种原因,参看 http://radzhang.iteye.com/blog/2237283

-----------------------------------------------------------------------------

五. 禁止 Shell 登录

Git 创建的用户可以通过 ssh 连接到服务器,对服务器安全造成一定影响。所以禁止 Git 用户 shell 登录,只赋予其操作 Git 的相关权限就可以了。

进入 /etc/passwd,将 bash 改为 git-shell

修改:user0001:x:1003:1003::/home/user0001:/bin/bash

为:user0001:x:1003:1003::/home/user0001:/usr/local/git/bin/git-shell

修改后 user0001 可以正常通过 ssh 使用 Git,但是无法 Shell 登录了。当通过 ssh user0001@x.x.x.x 登录时会报:

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

六. Git 相关命令

ls -la    #查看仓库的所有者

git remote -v    #查看源地址

git remote add origin git@x.x.x.x:test    #添加源

git status    #查看本地哪些文件没有提交

七. 参考网址

https://blog.csdn.net/permanent_2008/article/details/73839315

https://blog.csdn.net/hahachenchen789/article/details/78927460

https://git-scm.com/docs/git-clone#URLS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员X小鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值