搭建git服务器
本篇博客介绍在ubuntu 16.04中搭建git服务器的过程,操作平台是windows 10。
安装Gitosis管理用户与项目
Gitosis是一套用来管理 authorized_keys
文件和实现简单连接限制的脚本,对项目、用户以及项目的读写权限进行管理,安装命令如下:
1 | git clone https://github.com/res0nat0r/gitosis.git && cd gitosis && python setup.py install |
Gitosis默认使用的Git根目录是
/home/git/repositories
,其中 git
是即将新建的用户。如果你想把仓库放在别的地方,就用软连接将它与
/home/git/repositories
连接起来。
创建Git管理员账户
新建一个用户作为Git服务器的管理员: 1
2useradd -m git
passwd git
1.在本机生成公钥
windows中的ssh配置路径为 c:\Users\username\.ssh
,这里
username
为自己操作系统的用户名。 1
ssh-keygen -t rsa -C "youremail@yourcompany.com” -f ~/.ssh/dacas-rsa
2.上传公钥至服务器并激活Gitosis 将公钥拷贝到git用户下,因此先切换至git用户:
su git 之后用rz命令直接拷贝值服务即可。(Windows利用lrzsz拷贝文件至Linux)
3.初始化Gitosis 依然在git用户下,利用刚才上传的公钥初始化Gitosis:
gitosis-init < /home/git/id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
这里也可以采用SSH 免密码登录的操作: 创建
authorized_keys
文件,如果已经存在这个文件, 跳过这条。
1
touch ~/.ssh/authorized_keys
~/.ssh/authorized_keys
的权限改为600,
该文件用于保存ssh客户端生成的公钥,可以修改服务器的ssh服务端配置文件
/etc/ssh/sshd_config
来指定其他文件名。 1
chmod 600 ~/.ssh/authorized_keys
id_rsa.pub
的内容追加到 authorized_keys
中,
注意使用追加 >>
,不要用 >
,否则会清空原有的内容,使其他人无法使用原有的密钥登录。
1
cat /home/git/id_rsa.pub/id_rsa.pub >> ~/.ssh/authorized_keys
在Git服务器新建一个项目
完成上一步之后,你Git服务器已经装好了。相关信息总结如下:
- 默认的仓库地址是在
/home/git/repositories
。 - Git管理用户是刚才创建的git。
- Gitosis管理用户权限是通过一个git项目实现的,那个项目地址在
/home/git/repositories/gitosis-admin.git
,默认是你刚才上传公钥的电脑可以clone此仓库。
新建一个项目就是在默认的仓库地址下面新建一个空的git项目:
1
2cd /home/git/repositories
git init --bare test.git
在本机clone项目
为了方便操作,提前做一点简单配置。在
c:\users\username\.ssh\config
中输入以下内容。
1
2
3
4Host dacasserver
Hostname 159.226.94.159
User git
IdentityFile ~/.ssh/dacas-rsa
现在可以试一下用初始化 Gitosis 的公钥的拥有者身份 SSH
登录服务器,应该会看到类似下面这样: 1
2
3
4$ ssh git@dacasserver
PTY allocation request failed on channel 0
ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
Connection to gitserver closed.
在你本地计算机上 1
git clone git@dacasserver:gitosis-admin.git
gitosis-admin的中包括一个keydir文件夹和一个gitosis.conf文件,前者是用来存放用户的ssh key的,后者是用来管理用户权限的,举个例子,我现在要给张三和李四的电脑读写test的权限:
1.将张三电脑和李四电脑的ssh key拷贝至keydir文件夹下
例如将张三的公钥文件保存为zhangsan.pub放在keydir下(这个文件名字与下面配置文件要一致)、李四的公钥文件保存为lisi.pub放在keydir下。
2.在gitosis.conf中添加相关配置
[group test] members = zhangsan lisi writable = test 如此,我便新建了一个test的group,其中用户有zhangsan和lisi,他们拥有读写权限。
此时,如果你想让王五只有读的权限,那么就将配置文件改成:
[group test] members = zhangsan lisi writable = test [group test_read] members = wangwu readonly = test 如此,wangwu只能clone或者pull,却不能push。
3.将修改推送至服务器
此时只是完成了本地的修改,要将修改推送到服务器才能生效(add、commit、push),之后test那个仓库的权限就会像刚才在配置文件设置的那样。