沐光

记录在前端之路的点点滴滴

搭建私人 git 仓库

前言

本文原来维护在 segmentfault 上,由于本周时间不是很充足,因此将原来的文章维护至本博客,之后时间充裕的时候再补充一篇。本文简单介绍一下如何在自己服务器上搭建死人的 git 仓库,毕竟近期的 github 也不算是十分安全~还是有必要了解一下私人 git 仓库的搭建之法的。

客户端配置

安装 git

官方下载 git 安装包,根据提示安装即可,Git 官网

安装完成后配置个人的 git 信息,在 git bash 中输入以下信息。

1
2
git config --global user.name "your name"
git config --global user.email "your email"

创建 sshkey

在 bash 中输入以下信息,看有没有配置 ssh

1
2
3
cd ~/.ssh
# 如果没有报错则打印下 pub 信息,之后会用到。
cat .\id_rsa.pub

下面为创建 ssh-key 的方法

1
2
# 默认生成 SSH-2 的 RSA 密钥,密码部分直接回车即可
ssh-keygen -t rsa -C "mailaddress@example.com"

远程配置(ubuntu 16)

创建 git 用户

1
2
3
4
5
6
# 检验用户是否已经存在
id git
# 不存在则创建一个 git 用户(会有提示创密码)
adduser git
# 给 git 配置 sudo 权限
usermod -aG sudo git

注: 非 root 权限需要加 sudo

配置 Git

安装/更新 git

1
2
3
4
apt-get install git
# 初始化个人信息
git config --global user.name "your name"
git config --global user.email "your email"

配置仓库

1
2
3
4
5
6
7
8
# 选取合适的位置,创建 xxx.git 文件夹(必须 .git 结尾)
mkdir /data/git/yourname.git
# 创建空远程仓库
git init --bare data/git/yourname.git
# 将仓库拥有着改为 git 用户
chown -R git:git yourname.git
# 切换用户(切不切都无所谓,不切注意后面得改拥有者)
su git

注: 更改用户拥有者这一步,如果你是在 root 用户下建立文件的话需要更改,如果先切换成 git 用户了,那么就不需要改,可用 ll 或 ll -a 命令查看

配置认证用户信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 配置 ssh_config
cd /etc/ssh
sudo vi sshd_config
# 解开注释,如果注释了的话
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
# 重启服务(ubuntu 的 sshd 位置和其他博客写的不一样……),cd /etc/init.d,你可以在这里看到 ssh
sudo service ssh restart
# 进入 git 用户目录下,创建认证文件。注:此 .ssh 文件夹权限必须为 git
cd home/git
sudo mkdir .ssh
cd .ssh
sudo vi authorized_keys

# 然后此处粘贴客户端先前打印的的 rsa 的 pub 文件内容

# 修改仓库权限
cd /home/git
sudo chmod 700 .ssh
sudo chmod 600 .ssh/authorized_keys

在此仓库就配完了。

注: 很多博客没有 %h 这个东西,查了下 askubuntu ,这个貌似就是指 home

服务器自动部署配置

添加 hook

1
2
3
4
5
6
7
8
// 进入所创仓库的 hooks 文件目录
cd /data/git/server.git/hooks/
sudo vi post-receive
// 写入如下内容
#/bin/sh
GIT_WORK_TREE=yourFileAddress git checkout -f
// 保存后改下权限即可
chmod +x post-receive

注: yourFileAddress 的拥有者应该是 git 用户

扩展知识

如何测试账户的连接情况

1
ssh -T user@host

其中:

user:远程分支的通过 adduser 创建的用户,一般创建 git 用户管理 git 相关内容

host:服务器地址,可以直接用 ip 地址,有域名的可以写域名

例:ssh -T git@github.com

关于关闭 bash 登陆系统问题。

此主要配置禁止通过 git 来登陆服务器,为了服务器安全性建议配置一下:

1
2
sudo vi /etc/passwd
# 然后将 git 用户的那行的 /bin/bash 改成 /usr/bin/git-shell

注:如果出现错误,请自行查找该系统下的 git-shell 在哪个文件路径,默认应该是 /usr/bin 内

关于 600 和 700 权限问题。

语法:

1
chmod abc file

其中 a, b, c 各为一个数字,分别表示 User, Group 及 Other 的权限。因为:

读取 写入 执行
r = 4, w = 2, x = 1

故而:

rwx : 4 + 2 + 1 => 7

rw : 4 + 2 => 6

我们这边仅弄 User 权限,因此略。

参考

ubuntu 权限配置
仓库权限
%h mean
hooks 配置