lanying56123 发表于 2015-10-30 13:14:15

CentOS 架设git完整版

  Git 服务器搭建:
  http://www.iyunv.com/CentosServer/ftp/2014/0414/2789.html
  http://871421448.iyunv.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
  # cpid_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 端 只可以 cloneclient 公钥生成的管理库
  
  #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
  

writable = gitosis-admin
members = root@vm1      #显示用户root@vm1.pub是初始化gitosis公钥的拥有者,是唯一能管理gitosis-admin项目的人
  
   
       #组名称
members = root@vm1      #密钥用户名
writable = test               #仓库名称
  #Git
commit-a-m “user add”
  #Gitpush
  
  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》.生成密钥与公钥
  $ 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

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认证打开,即:



[*]1.RSAAuthentication yes
[*]2.PubkeyAuthentication yes
[*]3.AuthorizedKeysFile.ssh/authorized_keys
  
  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 –baretest.git
命令创建的仓库 ,如果clone
code , 只能使用git 组内的成员
  2》gitosis- admin命令建立的仓库, 如果
clonecode , 只有
git 一个user 可以使用
页: [1]
查看完整版本: CentOS 架设git完整版