标签:
Git 服务器搭建:
http://www.centoscn.com/CentosServer/ftp/2014/0414/2789.html
http://871421448.iteye.com/blog/1912205
http://weizhifeng.tumblr.com/post/25209375100/host-git-repositories-on-gitosis
1. 环境部署
系统环境:服务器端:CentOS 6.5 ,ip:172.20.48.15
客户端:CentOS 6.5 ,ip:172.20.48.18
软件版本:服务器端:源码编译安装,git-1.9.0.tar.gz
客户端:yum在线安装机制
2. 安装 (服务器端)
安装git
#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
#Wget : http://distfiles.macports.org/git/
#tar zxvf git-1.9.0.tar.gz
#cd git-1.9.0
#make prefix=/usr/local all
#make prefix=/usr/local install #root用户运行
查看版本号:git --version
git version 1.9.0
安装gitosis
gitosis为Git用户权限管理系统,通过管理服务端的/home/git/.ssh/authorized_key文件来执行对用户权限的管理,是一个python模块包
#yum install python python-setuptools
#git clone git://github.com/res0nat0r/gitosis.git
#cd gitosis/
#python setup.py install
显示Finished processing dependencies for gitosis==0.2即表示成功
安装 git ( 客户端 ):
#yum install git
#git --version
git version 1.7.1
3. ssh设置 (client秘钥 , server 公钥)
Client:
#scp ~/.ssh/id_rsa.pub root@192.168.56.1:~/
Server:
#ssh-keygen -t rsa
# cp id_rsa.pub /tmp/
4. 服务器上生成git用户
添加用户git:
#useradd -d /home/git git
#chown git:git /home/git
修改PATH,使git用户可以调用git:
vi /home/git/.bashrc
PATH=/usr/local/bin:/usr/local/git/bin:$PATH
在服务器端生成管理库 : (用来初始化 gitosis )
方式1: (client 公钥生成管理库)
#sudo -H -u git gitosis-init < ~/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/
注解:
1. 生成的gitosis-admin为Git的用户访问权限管理库,gitosis通过这个git库来管理所有git库的访问权限。
2. 通过执行初始化,该公钥的拥有者就能修改用于配置gitosis的那个特殊Git仓库了
修改上传权限:
#chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
方式2: (server 公钥生成管理库)
$ su git # 切换倒git用户下
$ gitosis-init < /tmp/id_rsa.pub # id_rsa.pub
方式3: 简单命令生成管理库:
git init –bare test.git
5.获取并配置gitosis-admin 管理端(server端-----client端)
Server 端 只可以 clone server 公钥生成的管理库
Client 端 只可以 clone client 公钥生成的管理库
#mkdir -p /git-repo/
#cd /git-repo/
#git clone git@server端IP:gitosis-admin.git
#cd gitosis-admin
#find .
./gitosis.conf
./keydir
./keydir/root@vm1.pub
注解:
gitosis.conf
文件用来设置用户、仓库和权限的控制文件
keydir目录则是保存所有具有访问权限用户公钥的地方
./keydir/root@vm1.pub:
如前所述,该用户具有访问权限
6.创建及设置管理项目
#cd /git-repo/gitosis-admin
#ls keydir/
root@vm1.pub ###### 文件名必须为: xxx.pub
添加项目:
#vim gitosis.conf
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = root@vm1 #显示用户root@vm1.pub是初始化gitosis公钥的拥有者,是唯一能管理gitosis-admin项目的人
[group test ]
#组名称
members = root@vm1 #密钥用户名
writable = test #仓库名称
#Git commit -a -m “user add”
#Git push
Writable 可读写 readonly 只读
对于同一个仓库设置不同的权限, 如 :
[group test ]
Writable = test 仓库名
Members = dongsheng@bjcjser01
[group test2]
Readonly = test 仓库名
Members = pengfei@bjcjser01
如果在git push的时候,遇到错误“ddress 192.168.0.77 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!”,解决为修改/etc/hosts文件,将ip地址与主机名对应关系写进去就可以了。
7. 初始、增加及使用项目git-test (客户端 )
#cd /git-repo
#mkdir test
#cd test
#touch README
#git add .
#git commit -a -m "init git-test"
#git remote add origin git@192.168.56.1:git-test.git
#git push origin master
注解:在新项目git-test里首次推送数据到服务器前,需先设定该服务器地址为远程仓库,但你不用事先到服务器上手工创建该项目个体的裸仓库— Gitosis 会在第一次遇到推送时自动创建。
说明:如果在执行 git push origin master 的时候,提示以下错误:
error: src refspec master does not match any.
error: failed to push some refs to ‘git@192.168.0.77:pro2.git‘
这是由于项目为空的原因,我们在项目目录里新创建一个文件。经过->add -> commit -> push 就可以解决了
Ps:
$ touch a.txt
$ git add a.txt
在添加文件的目录中, 输入 git add 。
$ git commit -a -m ‘add a.txt‘
$ git push
如果在git clone的时候遇到“
error: cannot run ssh: No such file or directory - cygwin git”错误,则表示本机没有安装ssh命令。安装方法请参考:http://blog.haohtml.com/archives/13313
8. 客户端增加其他成员公钥到系统中:通过添加用户的公钥到keydir目录即可
1》.生成密钥与公钥
[dev1@bogon ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dev1/.ssh/id_rsa):
Created directory ‘/home/dev1/.ssh‘.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/dev1/.ssh/id_rsa.
Your public key has been saved in /home/dev1/.ssh/id_rsa.pub.
The key fingerprint is:
99:4c:e4:00:56:a9:a2:e2:68:20:8c:60:90:2e:b9:b8 dev1@bogon
The key‘s randomart image is:
+--[ RSA 2048]----+
| . ooo.. |
|o . .+ |
|o. . o |
|+o. . o o |
|Bo . S |
|O. |
|*. |
|Eo |
|. |
+-----------------+
[dev1@bogon
~]$ ls .ssh
id_rsa id_rsa.pub
2》.将公钥上传到git
server的gitosis-admin/keydir/
目录里,文件名就是是用户名(这里文件名必须与客户端的用户名一致,否则无法使用.不知道同名的情况下如何处理?)
注意:我这里是在同一台机器上测试的,不同的机器可以用scp命令来实现上传文件,主要pub文件上传到keydir目录下才可以(scp ~/.ssh/id_rsa.pub root@192.168.0.77:/tmp/sxf.pub)
cd /root/gitosis-admin/keydir/
cp /home/dev1/.ssh/id_rsa.pub ./dev1.pub
3》.创建新项目,将dev1用户添加进去
cd /home/gitosis-admin/
vi
gitosis.conf
[group project2]
writable = project2
members = dev1
4》.保存修改,并将修改提交到git server上
git add .
git commit -a -m ‘add new user dev1‘
git push
5》.在客户端测试(用户为dev1)
创建项目project2目录(一定要和项目名称一样)
mkdir
/data/project2
cd /data/project2
git init
touch test.txt
git add .
git
config --global user.email "you@example.com"
git config --global user.name "Your Name"
git
commit -a -m ‘init project2‘
git remote add origin git@xxx:project2.git
git push origin master
git pull
可以看到已经提交成功了!
如果客户端为Linux的话,在执行git pull的时候,出现
Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open.
等错误显示了,只要把权限降到0600就ok了.这种情况下一般是属于将另其它地方的公钥直接放在其它客户端用的原因。
输入命令
chmod 0600 ~/.ssh/id_rsa
然后再执行相应的命令即可.这样就可以密钥登陆了.
9. 客户免密码登陆:
在 /home/dongsheng/.ssh/authorized_keys 文件中将在客户端生成的 dongsheng 公钥写入。 (如果没有authorized_keys 此文件,自己创建)
注意:git上的仓库对git用户要有写权限,同时需要将/etc/ssh/sshd_config中将RSA认证打开,即:
10. 常见问题:
/home/git/repositories/gitosis-admin.git/hooks/post-update 为可执行即属性为 0755
1. git操作需要输入密码
原因
公密未找到
解决
上传id_rsa.pub到keydir并改为’gitosis帐号.pub’形式,如miao.pub。扩展名.pub不可省略
2.
ERROR:gitosis.serve.main:Repository read access denied
11. 自己随手补充:
1》 git init –bare test.git 命令创建的仓库 ,如果clone code , 只能使用git 组内的成员
2》 gitosis- admin 命令建立的仓库, 如果 clone code , 只有 git 一个user 可以使用
标签:
原文地址:http://www.cnblogs.com/keer23/p/4409668.html