Centos搭建Git环境

安装Git

1
2
3
git --version // 如无,则安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install -y git

创建Git用户

1
2
useradd git
passwd git // 设置密码

搭建Git仓库地址

1
su - git // 切换用户,这步很重要
  1. 创建/指定一个目录作为git的拉取路径
1
2
3
4
cd /home/git
mkdir ./repo // 仓库地址
cd ./repo
git init --bare share.git //创建一个干净的仓库
  1. 创建/指定一个目录作为代码的实际保存路径
1
2
cd /home/git
mkdir -p ./project/share //创建代码的实际保存路径
  1. 将代码路径与拉取路径做绑定
1
2
3
4
5
cd /home/git/repo/share.git/hooks
vi post-receive // 创建 hook 钩子函数,输入了内容如下:

#!/bin/sh
git --work-tree=/home/git/project/share --git-dir=/home/git/repo/share.git checkout -f
  1. 添加完毕后修改权限
1
2
3
chmod +x post-receive
exit // 退出到 root 登录
chown -R git:git /home/git/repo/share.git // 添加权限

设置SSH访问

本地生成RSA 秘钥

  1. 先在用户主目录${USER.HOME}$下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开cmd,创建SSH Key:
1
ssh-keygen -t rsa -C "youremail@example.com" //注意是自己的邮箱地址
  1. 把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可;
  2. 顺利生成id_rsa和id_rsa.pub两个文件,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,需要上传到服务器;

Git服务器完成绑定

  1. 上传id_rsa.pub到服务器;
  2. /home/git下创建.ssh目录,然后创建authorized_keys文件,并将刚生成的公钥导入进去。
1
2
3
4
5
mkdir /home/git/.ssh/
cp id_rsa.pub authorized_keys

# 如果已经存在authorized_keys文件,则执行命令追加公钥内容到authorized_keys
cat id_rsa.pub >> /home/dxpt/.ssh/authorized_keys
  1. 设置权限
1
2
# 公钥文件的权限必须是644
chmod 644 authorized_keys

客户端ssh验证

注意事项:权限如果配置完对等信任公钥,仍提示输入密码或者访问拒绝,则需要查看服务器的目录权限是否正确,home目录权限755,.ssh目录权限是755,authorized_keys文件权限是644

服务器禁用git用户的shell登陆

  1. 出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
1
git:x:1000:1000:,,,:/home/git:/bin/bash  // 数字可能不同
  1. 最后一个冒号后改为:
1
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell
  1. 这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。