linux下CentOS7搭建git仓库

2019-05-23  本文已影响0人  IT小池

1. 安装git

Linux 做为服务器端系统,Windows 作为客户端系统,分别安装 Git

yum install -y git

安装完后,查看版本

git -version

windows下就是一键安装了

2. 服务器端创建 git 用户,用来管理 Git 服务,并为 git 用户设置密码

创建用户 git

[root@localhost /]# id git # 查看用户
[root@localhost /]# useradd git
[root@localhost /]# passwd git

设置 /home/git/cangku/test为版本仓库

[root@localhost /]# mkdir /home/git/cangku
[root@localhost git]# chmod -R 777 cangku/
[root@localhost git]# mkdir /home/git/cangku/test
[root@localhost git]# chmod -R 777 /home/git/cangku/test

test初始化为一个git仓库

[root@localhost cangku]# cd test
[root@localhost cangku]# git init --bare  // --bare 创建一个裸仓库

由于创建一个git账户来管理仓库,所以把 Git 仓库的 owner(属主/属组) 修改为 git

[root@localhost cangku]# chown -R git:git ./test

然后可以 ll 进行查看,然后就可以在windows下进行克隆项目

$ git clone ssh://git@192.168.1.100/home/git/cangku/test #可能需要输入git用户密码
或者
$ git clone ssh://root@192.168.1.100/home/git/cangku/test #此时输入root密码

3.服务器端 Git 打开 RSA 认证

进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

保存并重启 sshd 服务:

[root@localhost ssh]# /etc/rc.d/init.d/sshd restart
或者
service sshd restart
或者
/bin/systemctl restart sshd.service

AuthorizedKeysFile 得知公钥的存放路径是.ssh/authorized_keys,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 git(上面创建的用户git),所以实际存放公钥的路径是/home/git/.ssh/authorized_keys

在 /home/git/ 下创建目录 .ssh

[root@localhost /]# mkdir ~/.ssh
[root@localhost /]# cd ~
[root@localhost /]# ll -a 

注意:把 .ssh的目录权限改成可写入,不然后面导入会提示无权限

[root@localhost git]# chmod -R 777 .ssh

将客户端公钥导入服务器端 /home/git/.ssh/authorized_keys 文件,在 widnows下的桌面中打开 git bash,执行

Administrator@PC-20190319UHLW MINGW64 ~/Desktop
$ ssh git@192.168.1.100 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
git@192.168.1.100's password:

执行完毕,回到服务器端,查看 .ssh 下是否存在 authorized_keys 文件:

[root@localhost git]# cd .ssh
[root@localhost .ssh]# ll

也可以查看下 authorized_keys是否是客户端生成的公钥

[root@localhost .ssh]# cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL3bQwEDbwQ+ghkq/BO8rj8AExFWldopPMyWI6NHfVHCzMrHqVcJrLG7RtEDQD+lTDJIXjKF/SoxLfTyLEQrazbbP/JJImo4XJVTt+KGc3z6gw4vQndz0CPmpKzYECx6rmoicYXTp/amX/T9O4TTJUI3de5fY/pwy5stJ3Fm4SlFGic3DSJDiIlRCPECtUheZ3Rxt9bx6CXdaCmu3m5pZbWnOuhV8VhAmPY5kA5eR1iG36nnlMmZZyr50lPN0rGFGFOzJ7FjMCyt6NlCpVqvL+zt2TtCzwtYDv4dQrKCIDBnTisz+Y0R/bj22vosixYij+0WTEzK6Vm81wkw8nkLPh Administrator@PC-20190319UHLW

重点:更改 .sshauthorized_keys权限

[root@localhost git]# chmod -R 700 .ssh
[root@localhost git]# cd .ssh
[root@localhost .ssh]# chmod -R 600 authorized_keys 

注意:修改 .ssh 目录的权限为 700;修改 .ssh/authorized_keys 文件的权限为 600

4. 禁止 git 用户 ssh 登录服务器

之前在服务器端创建的 git 用户不允许 ssh 登录服务器,编辑 /etc/passwd,找到:

git:x:502:504::/home/git:/bin/bash

修改为

git:x:502:504::/home/git:/bin/git-shell

此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。

5. 设置git钩子(push之后,项目同步)

进入我们的裸仓库的 hooks文件夹,然后新建一个 post-receive 文件。

cd hooks/
vim post-receive

加入如下内容:

#!/bin/bash
git --work-tree=/www/test checkout -f

其中/www/test为你实际需要同步的站点目录。
然后修改post-receive为可执行文件(其实这就是一个脚本文件)

chmod +x post-receive

post-receive的原理就是,当远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)。其实git还提供了很多其它动作的钩子。
注意:同时你还需要修改你的web站点目录的权限,修改所属用户与用户组为git,否则钩子的权限可能会不足而导致执行失败。(你也可以通过添加git用户到相应的用户组来解决问题)
修改所属用户

chown git:git -R /www    # 修改所属用户

设置好钩子后,当你本地再次执行push的时候,你会发现你web目录的文件也同步的更新了。

参考url:http://www.cnblogs.com/dee0912/p/5815267.html

参考url:https://www.cnblogs.com/gaocy/p/8546345.html

上一篇下一篇

猜你喜欢

热点阅读