CentOS7下Git服务搭建(SSH和HTTP)

2 篇文章 0 订阅
2 篇文章 0 订阅

环境准备

VMware上安装CentOS7

SSH

安装git

yum install git

创建Git用户

adduser git

创建证书登录

客户端使用ssh-keygen命令生成密钥对1,服务端将客户端的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
没有/home/git/.ssh/authorized_keys可以自己创建一个。

初始化仓库

选定一个位置,比如/usr/local/git_repo,以下简称GIT_PROJECT_ROOT2

git init --bare ${GIT_PROJECT_ROOT}/demo.git

表示初始化一个叫demo的git仓库,详解可参考git init 与 git init --bare 的区别

git用户授权

此时客户端如果直接使用命令

git clone git@IP:/usr/local/git_repo/demo.git

会出现禁止克隆的错误,这是因为这个仓库不属于用户git,因此需要在服务器上进行git用户授权:

chown git:git -R ${GIT_PROJECT_ROOT}

注意:每次新建仓库均需授权git用户的操作

禁止shell登录

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

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

HTTP

安装

yum install httpd
yum install gitweb

设置

如果不是专门的git服务器,一般需要指定git仓库访问端口,另外为了安全还需要设置用户名密码等。

用户名密码
# user01为账户名 可以随意定义
htpasswd -m -c /etc/httpd/conf.d/git-team.htpasswd user01
权限
chown git:git /etc/httpd/conf.d/git-team.htpasswd
chmod 640 /etc/httpd/conf.d/git-team.htpasswd
httpd.conf
vim /etc/httpd/conf/httpd.conf
# 修改 80 -> 19109
Listen 19109
# 修改 apache -> git
User git
Group git


# 添加
## 端口修改为自己设置的端口 *:19109
<VirtualHost *:19109>
        ### 主机名称|IP
        ServerName 192.168.196.196
        SetEnv GIT_HTTP_EXPORT_ALL
        ### 设置环境变量GIT_PROJECT_ROOT指向仓库文件夹地址
        SetEnv GIT_PROJECT_ROOT /usr/local/git_repo
        ### 将以/git/开头的访问路径映射至git的CGI程序git-http-backend
        ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
        <Location />
                AuthType Basic
                #### 这个名字随便起
                AuthName "Git"
                #### 验证用户帐户的文件
                AuthUserFile /etc/httpd/conf.d/git-team.htpasswd
                Require valid-user
        </Location>
</VirtualHost>

服务操作

启动
systemctl start httpd

此时有报错,使用journalctl -xe发现如下错误:

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:19109
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:19109
no listening sockets available, shutting down
Unable to open logs

据说是SELinux安全机制的作用,修改/etc/selinux/configSELINUX=disable

将端口19109加入http_port_t预定义中:

semanage port -a -t http_port_t -p tcp 19109

重新启动即可。

其他操作
systemctl status httpd
systemctl stop httpd
systemctl restart httpd

客户端

此时SSH和HTTP方式的git仓库均已搭建成功,在客户端可以同时使用两种方式克隆:

# SSH
git clone git@IP:/usr/local/git_repo/demo.git

# HTTP,此时需要用户名密码
git clone http:IP:19109/git/demo.git

参考


  1. ssh-keygen -C "test key",一般test key可以都写成邮箱用来标识身份 ↩︎

  2. 可以使用vim /etc/profile添加GIT_PROJECT_ROOT环境变量export GIT_PROJECT_ROOT=/usr/local/git_repo之后resource /etc/profile使其即时生效 ↩︎

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值