Gitosis配置
2016-01-03 00:26
197 查看
主要步骤参考: http://www.tuicool.com/articles/fqUvQvr
注意点:
1. 通过git clone 将gitosis-admin 从服务器端克隆到本地客户端。本地目录如下:
本地修改,然后提交到服务器,这样git hooks才会自动更新服务器端的authorized_keys。在服务器端直接修改不会调用hooks!
2. git remote add -f origin git@115.29.138.242:Geekkitchen.git,而不是 git remote add -f origin git@115.29.138.242:/home/git/repositories/Geekkitchen.git。
正常情况下,如果没有gitosis,url应该是后者。但gitosis权限设置后,不需要全路径,只需要project名字。
3.
git hook 配置完成,之后代码只需上传到git服务器即可。
附 git hook 设置过程:
1). (git Server) /home/git/repositories/Geekkitchen.git/hooks
unset GIT_DIR
cd /scratch/web/Geekkitchen/
env -i git pull
2). (work dir/git client) /scratch/web/Geekkitchen/.git
3). chmod -R 777 /scratch/web/Geekkitchen
----------------------------------------
Git是目前世界上最先进的分布式版本控制系统。大名鼎鼎的GitHub就是一个免费托管开源代码的远程仓库。但既不想公开源代码,又舍不得给GitHub交保护费,那需要我们自己搭建一台Git服务器作为私有仓库使用。下面我们使用gitosis(https://github.com/res0nat0r/gitosis )这个服务器来配置这个私有仓库。简单地说,Gitosis
就是一套用来管理 authorized_keys文件和实现简单连接限制的脚本,它是Python开发的,所以要保证Python和Python setuptools提前安装好。
(1). 首先要保证openssh的服务器和客户端已经被安装,并安装git
(2). git配置准备
创建gitosis管理员的个人公钥和私钥。首先su到git用户下面
默认生成2048位,可以提高到4096位来提高安全级别,通过下面的命令创建公钥和私钥
默认情况下,公钥和私钥会保存在~/.ssh目录下,如下所示:
初始化全局设置
首先要用之前创建的管理员公钥初始化gitosis。
下面用用初始化 Gitosis 的公钥的拥有者身份 SSH 登录服务器,会显示下面的报错信息。
Gitosis 认出了该用户的身份,但由于没有运行任何 Git 命令,所以它断开了连接。下面通过git clone命令来连接并克隆gitosis的控制仓库。首先创建一个目录来
mkdir myrepo
这里我把服务器默认的ssh端口修改了,所以要在客户端中创建~/.ssh/config,并添加Port 12345这一行。然后执行下面语句克隆
这样gitosis的控制目录gitosis-admin就被clone下了。里面结构如下:
其中:
gitosis.conf 文件是用来设置用户、仓库和权限的配置文件。
keydir 目录则是保存所有具有访问权限用户公钥的地方,允许访问gitosis的用户的公钥都保存在这里。
这表明了用户git(初始化 Gitosis 公钥的拥有者)是拥有唯一管理 gitosis-admin这个仓库的权限。下面我们可以新增一个项目。为此我们要建立一个名为dev的组(group),以及他们拥有写权限的项目。并允许’debugo’这个用户有权利读写’proj1’这个新项目:
debugo虽然已经添加到了配置文件中,但它的公钥还没有被gitosis获知。所以我们要将debugo的公钥改名为debugo.pub,拷贝到keydir中。
修改完之后,提交 gitosis-admin 里的改动,并push到服务器使其生效。
在debugo用户目录下,首先先初始化用户信息。
debugo用户已经有对proj1这个项目有读写权限了,但是proj1这个项目并没有任何内容。下面我们首先初始化一个本地项目。
OK!下面添加一个新的只读账户qa。在控制仓库中编辑一个新的组qa
下面在qa用户中,可以checkout这个项目了。
下面成功从server上clone下项目,并检查是否能进行提交。
注意点:
1. 通过git clone 将gitosis-admin 从服务器端克隆到本地客户端。本地目录如下:
gitosis.conf keydir
本地修改,然后提交到服务器,这样git hooks才会自动更新服务器端的authorized_keys。在服务器端直接修改不会调用hooks!
2. git remote add -f origin git@115.29.138.242:Geekkitchen.git,而不是 git remote add -f origin git@115.29.138.242:/home/git/repositories/Geekkitchen.git。
正常情况下,如果没有gitosis,url应该是后者。但gitosis权限设置后,不需要全路径,只需要project名字。
3.
git hook 配置完成,之后代码只需上传到git服务器即可。
附 git hook 设置过程:
1). (git Server) /home/git/repositories/Geekkitchen.git/hooks
unset GIT_DIR
cd /scratch/web/Geekkitchen/
env -i git pull
2). (work dir/git client) /scratch/web/Geekkitchen/.git
url = git@115.29.138.242:Geekkitchen.git
url = /home/git/repositories/Geekkitchen.git/
3). chmod -R 777 /scratch/web/Geekkitchen
----------------------------------------
Git是目前世界上最先进的分布式版本控制系统。大名鼎鼎的GitHub就是一个免费托管开源代码的远程仓库。但既不想公开源代码,又舍不得给GitHub交保护费,那需要我们自己搭建一台Git服务器作为私有仓库使用。下面我们使用gitosis(https://github.com/res0nat0r/gitosis )这个服务器来配置这个私有仓库。简单地说,Gitosis
就是一套用来管理 authorized_keys文件和实现简单连接限制的脚本,它是Python开发的,所以要保证Python和Python setuptools提前安装好。
apt-get install python-setuptools
1. gitosis安装
(1). 首先要保证openssh的服务器和客户端已经被安装,并安装gitapt-get install openssh-server openssh-client
apt-get install git-core
(2). git配置准备
# 创建git仓库存储目录 sudo mkdir -p /app/git/repositories # 设置git仓库权限 sudo chown -R git:git /app/git/repositories sudo chmod -R 755 /app/git/repositories sudo useradd -d /app/git -m git sudo passwd git
创建gitosis管理员的个人公钥和私钥。首先su到git用户下面
su - git
默认生成2048位,可以提高到4096位来提高安全级别,通过下面的命令创建公钥和私钥
ssh-keygen -t rsa -b 4096
默认情况下,公钥和私钥会保存在~/.ssh目录下,如下所示:
id_rsa id_rsa.pub known_hosts
初始化全局设置
git config --global user.name "git" git config --global user.email "git@test.com"
(3)、获取并安装gitosis
cd /tmp git clone https://github.com/res0nat0r/gitosis.gitcd gitosis sudo python setup.py install
2、管理gitosis
首先要用之前创建的管理员公钥初始化gitosis。su - git $ gitosis-init < ~/.ssh/id_rsa.pub Reinitialized existing Git repository in /app/git/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /app/git/repositories/gitosis-admin.git/ chmod 755 /app/git/repositories/gitosis-admin.git/hooks/post-update
下面用用初始化 Gitosis 的公钥的拥有者身份 SSH 登录服务器,会显示下面的报错信息。
$ ssh -p 9999 git@localhost PTY allocation request failed on channel 0 ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment. Connection to localhost closed.
Gitosis 认出了该用户的身份,但由于没有运行任何 Git 命令,所以它断开了连接。下面通过git clone命令来连接并克隆gitosis的控制仓库。首先创建一个目录来
mkdir myrepo
这里我把服务器默认的ssh端口修改了,所以要在客户端中创建~/.ssh/config,并添加Port 12345这一行。然后执行下面语句克隆
git clone git@localhost:gitosis-admin.git Cloning into 'gitosis-admin'... remote: Counting objects: 5, done. remote: Compressing objects: 100% (4/4), done. remote: Total 5 (delta 0), reused 5 (delta 0) Receiving objects: 100% (5/5), done. Checking connectivity... done.
这样gitosis的控制目录gitosis-admin就被clone下了。里面结构如下:
cd gitosis-admin/ $ ls -R .: gitosis.conf keydir ./keydir: git@my-server.pub
其中:
gitosis.conf 文件是用来设置用户、仓库和权限的配置文件。
keydir 目录则是保存所有具有访问权限用户公钥的地方,允许访问gitosis的用户的公钥都保存在这里。
$ cat gitosis.conf [gitosis] [group gitosis-admin] members = git@my-server writable = gitosis-admin
这表明了用户git(初始化 Gitosis 公钥的拥有者)是拥有唯一管理 gitosis-admin这个仓库的权限。下面我们可以新增一个项目。为此我们要建立一个名为dev的组(group),以及他们拥有写权限的项目。并允许’debugo’这个用户有权利读写’proj1’这个新项目:
[group dev] members = debugo@my-server writable = proj1
debugo虽然已经添加到了配置文件中,但它的公钥还没有被gitosis获知。所以我们要将debugo的公钥改名为debugo.pub,拷贝到keydir中。
cp /tmp/id_rsa.pub keydir/debugo@my-server.pub git add keydir/debugo@my-server.pub
修改完之后,提交 gitosis-admin 里的改动,并push到服务器使其生效。
$ git commit -am 'add new group' [master 36fc5a9] add new group 2 file changed, 3 insertions(+) $ git push origin master Counting objects: 5, done. ...... 9bc77eb..36fc5a9 master -> master
3. git项目管理
在debugo用户目录下,首先先初始化用户信息。$ git commit -am 'add new group' [master 36fc5a9] add new group 2 file changed, 3 insertions(+) $ git push origin master Counting objects: 5, done. ...... 9bc77eb..36fc5a9 master -> master
debugo用户已经有对proj1这个项目有读写权限了,但是proj1这个项目并没有任何内容。下面我们首先初始化一个本地项目。
$ mkdir proj1 $ cd proj1/ $ git init Initialized empty Git repository in /home/debugo/proj1/.git/ # 添加几个新文件,并将所有文件列入索引中。 $ touch main.py hello.py $ git add . # 添加文件内容并进行一次提交 $ echo 'print "hello world"' > hello.py $ git commit -a -m "origin" [master (root-commit) b9ecf8e] origin 2 files changed, 1 insertion(+) create mode 100644 hello.py create mode 100644 main.py # 检查该git仓库状态,保证它是最新的。 $ git status On branch master nothing to commit, working directory clean # 下面push到远程的server上。 $ git remote add origin git@localhost:proj1.git $ git push origin master Initialized empty Git repository in /app/git/repositories/proj1.git/ Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 261 bytes | 0 bytes/s, done. Total 4 (delta 0), reused 0 (delta 0) To git@localhost:proj1.git * [new branch] master -> master
OK!下面添加一个新的只读账户qa。在控制仓库中编辑一个新的组qa
$ cp /tmp/qa@my-server.pub keydir/ $ vim gitosis.conf [group qa] members = qa@my-server readonly = proj1 $ git commit -am 'add new group and key' [master 6da3ce2] add new group and key 1 file changed, 4 insertions(+) $ git push origin master Counting objects: 5, done. ......
下面在qa用户中,可以checkout这个项目了。
#初始化客户端 $ echo "port 12345" > .ssh/config $ git config --global user.name "qa" $ git config --global user.email "qa@test.com"
下面成功从server上clone下项目,并检查是否能进行提交。
$ git clone git@localhost:proj1.git Cloning into 'proj1'... remote: Counting objects: 4, done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 0), reused 0 (delta 0) Receiving objects: 100% (4/4), done. Checking connectivity... done. $ git push origin master ....... Please make sure you have the correct access rights and the repository exists.
相关文章推荐
- Windows2008R2下安装gitosis服务器(基于cygwin)
- gitosis配置git服务器
- CentOS下的Git服务器:Gitosis
- 如何在Ubuntu Server 11.10上安装GitLab 推荐
- ubuntu 16.04 下搭建git服务器(gitosis+git-daemon+gitweb)
- 私有git 搭建
- 手把手搭建gitosis 绝对不坑
- 跨windows、Linux的Gitosis运用概念全解
- Git服务器Gitosis安装设置
- gitosis + apache2 + gitweb搭建git服务器
- Git 服务器 Gitosis 的安装
- 在ubuntu上搭建git-server及android studio使用git
- 阿里云下搭建Git服务器
- gitosis使用手记
- GIT服务器扩展之gitosis
- 服务器上的 Git - Gitosis
- CentOS上搭建Git服务器步骤详解
- iOS Cocoapods的安装
- HDU-1794 方格填数 (贪心+四分)
- msf生成shellcode