zoukankan      html  css  js  c++  java
  • debian下使用gitosis+gitweb搭建SSH认证的git服务器

           搭建完成Git服务器后,需要使用两台机器进行测试,一台机器作为服务器端server,一台服务器作为客户端client。整个系统,需要三个计算机账户,这里假设server端的账户名为git,client端需要一个管理员gitadmin,一个开发者gituser。这里的环境,使用两台处于同一局域网内的两台机器作为server以及client,其中server端系统为debian 6,client端为fedora 16。
    1    建立server端账户git,用于安装git相关的服务。

    sudo useradd -m git #添加git账户
    
    sudo passwd git                #添加git密码

           添加完账户之后,如果/etc/default/useradd设置合理的话,系统会自动生成相应的宿主目录。如果没有的话,而且想把托管项目放在宿主目录下的话,则需要手动添加。

    su git                                #切到新建的git账户
    
    sudo mkdir /home/git    #新建宿主目录
    
    sudo chown git:git /home/git #修改相应的uid及gid

           debian下新建git账户之后,切到git下,相应的bash以及sudo均没有配置,需要重新配置,这里为了方便,直接将之前已经配置好的其他用户的配置文件拷贝过来。

    su root
    
    visudo      #配置sudo,将git ALL=(ALL)ALL添加到里面,保存后生效。
    
    su git       #切回git账户
    
    sudo cp /home/XXX/.bashrc  /home/git/
    
    sudo cp /home/XXX/.profile  /home/git/    #XXX为你的其他的宿主目录

           这样,server端的git账户就建立完毕。client端的管理账户admin以及user同理可以建立。

    2   server端安装git及SSH相关服务

      2.1 安装git并初始化

    sudo apt-get install git-core        #安装git,安装成功之后,配置git
    
    git config --global user.name "yourname"
    
    git config --global user.email "yourname@yourmail"   #配置git

      2.2安装ssh服务

         sudo apt-get install openssh-server openssh-client  

      2.3配置SSH

              安装完成之后,修改ssh配置文件/etc/ssh/sshd_config  

       Port 22 # 修改成你想要的登陆端口,如2222
    
       PermitRootLogin no # 禁止root用户登陆
    
       StrictModes yes # 检查密钥的用户和权限是否正确,默认打开的
    
       RSAAuthentication yes # 启用 RSA 认证
    
       PubkeyAuthentication yes # 启用公钥认证
    
       PasswordAuthentication no # 禁止密码认证,默认是打开的
    
       ServerKeyBits 1024 # 修改后变为此状态,将ServerKey强度改为1024比特
    
       PermitEmptyPasswords no # 修改后变为此状态,禁止空密码进行登录

        修改完成之后,重启SSH服务:

      sudo /etc/init.d/ssh restart

    3    client端创建管理员账户并安装SSH,生成认证SSH钥匙对。

    sudo useradd -m gitadmin
    sudo passwd gitadmin
    su gitadmin
    cd ~
    sudo yum install ssh     #配置完git管理员账户并安装完SSH之后,需要生成管理员gitadmin的SSH钥匙对。
    ssh-keygen -t rsa #注意配置账户的权限,使其对当前目录具有读写权限。安装过程直接敲写回车即可。

    默认的安装生成的SSH公钥,存在宿主目录/home/gitadmin/.ssh/下面,其中id_rsa.pub作为公钥,留做备用。开发者账户gituser同样操作。建议将相应公钥重命名,以免弄混。

    sudo cp.ssh/id_rsa.pub ~/temp/
    sudo mv ~/temp/id_rsa.pub gitadmin.pub

    4   server 端安装gitosis

          gitosis是管理git服务器的工具,相比手动管理,使用起来更加方便。

    su git
    cd ~
    mkdir gitosis_setup
    cd gitosis_setup
    git clone https://github.com/res0nat0r/gitosis.git
    cd gitosis
    sudo python setup.py install      #安装gitosis的过程需要使用python工具包,如果安装失败,需要安装python-setuptools
    sudo apt-get install python-setuptools

    5   server端配置并运行gitosis

      5.1将第3步中的client端的管理员gitadmin的公钥拷贝或者上传到server端。

      5.2初始化gitosis,初始的过程中需要添加一个管理员。

                   假设gitadmin的公钥位于宿主目录~中。

    su git
    cd ~
    sudo chmod 777 gitadmin.pub
    sudo -H -u git gitosis-init < gitadmin.git    #初始化gitosis

           此时,会在/home/git目录下生成一个空仓库repositories/gitosis-admin.git,次仓库的目的是管理员gitadmin用来管理git server的,不是托管项目的git。相应的配置文件位于repositories/gitosis-admin.git/gitosis.conf。

           同时,如果想要别人能够clone gitosis-admin.git ,需要执行一下操作:

      sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

    6     server端安装并配置gitweb(需要安装apache2)

      6.1安装gitweb  

    sudo apt-get install gitweb apache2
    sudo a2enmod rewrite   #允许rewrite模块,需要用到。

      这里,我们由于有了一个管理员的空仓库,所以以此作为例子。将/home/git/repositories作为server端项目托管根目录。编辑配置文件

    /etc/gitweb.conf
    sudo vim /etc/gitweb.conf

      然后修改为如下形式:

    $projectroot = "/home/git/repositories";
    $git_temp = "/tmp";
    #$home_link = $my_uri || "/";
    $home_text = "indextext.html";
    $projects_list = $projectroot;
    $stylesheet = "/gitweb.css";
    $logo = "/git-logo.png";
    $favicon = "/git-favicon.png";
    # enable human readable URLs
    $feature{'pathinfo'}{'default'} = [1];

      6.2然后,配置apache2,创建一下新的虚拟host文件gitweb。

      sudo vim /etc/apache2/sites-available/gitweb      

      将创建的gitweb文件内容修改为:

    <VirtualHost *>
    ServerName git.mydomain.com
    ServerAlias git
    
    DocumentRoot /home/git/repositories
    SetEnv GITWEB_CONFIG /etc/gitweb.conf
    
    RewriteEngine on
    RewriteRule ^/$ /gitweb [PT]
    RewriteRule ^/(.*.git/(?!/?(HEAD|info|objects|refs)).*)?$ /gitweb%{REQUEST_URI} [L,PT]
    
    # Aliases
    ScriptAlias /gitweb /usr/lib/cgi-bin/gitweb.cgi
    Alias /gitweb.css /usr/share/gitweb/gitweb.css
    Alias /git-logo.png /usr/share/gitweb/git-logo.png
    Alias /git-favicon.png /usr/share/gitweb/git-favicon.png
    
    # Logfiles
    ErrorLog /var/log/apache2/gitweb.error.log
    CustomLog /var/log/apache2/gitweb.access.log combined
    </VirtualHost>
      sudo a2ensite gitweb         #使其生效。

      上述配置文件中开了RewriteEngine on,需要配置一下apache2。修改/etc/apache2/httpd.conf文件。添加

      LoadModule rewrite module /usr/lib/apache2/modules/mod rewrite.so

      然后,保存后,从其apache2的服务。

      /etc/init.d/apache2 restart

    7    client端管理员gitadmin管理gitosis,以上述仓库为例。

      7.1 首先,管理员从git服务器上clone下生成的目标仓库。

    su gitadmin
    cd ~
    mkdir gitproject
    cd gitproject
    git clone git@192.168.0.2:gitosis-admin.git   #此处是同一局域网内的两台机器,直接输入server端的ip地址即可。主目录前面已经设为repositories/
    cd gitosis-admin/
    ls -al
    总用量 24
    drwxr-xr-x 5 sshtest sshtest 4096  3月 30 00:51 .
    drwxrwxr-x 3 sshtest sshtest 4096  3月 30 00:04 ..
    drwxrwxr-x 8 sshtest sshtest 4096  3月 30 00:53 .git
    -rw-rw-r-- 1 sshtest sshtest  205  3月 30 00:51 gitosis.conf
    drwxrwxr-x 2 sshtest sshtest 4096  3月 30 00:51 keydir

           可以看到,目录实际上也是一个git项目,这正式gitosis的有意思的地方,利用git管理git服务器。除了.git以外,里面文件有一个配置文件conf,一个目录keydir。

          gitosis.conf正是管理员配置git服务器的配置文件,用于配置用户和权限。keydir目录存放的是所有组成员user的公钥。打开配置文件conf

    vim gitosis.conf
    [gitosis]
    [group gitosis-admin]
    writable = gitosis-admin
    members = gitadmin@localhost.localdomain

       可见此时,git服务器上只有一个管理员gitadmin@localhost.localdomain。其拥有读写权限。

      7.2 管理员修改配置文件

              这一步,跟大多数的git的管理是一样的,管理员修改完之后,commit,然后push到服务器端。这里新建一个新项目仓库为例。

    vim gitosis.conf
    [gitosis]
    gitweb=yes
    [group gitosis-admin]
    writable = gitosis-admin
    members = gitadmin@localhost.localdomain
    [group apps]
    writable=apps
    members=gitadmin@localhost.localdomain user@192.168.0.3

    这里,gitweb=yes启用对gitweb的支持。group apps定义了一个新的空仓库apps,同时授予了gitadmin以及user两个用户读写权限。注意,此时user的公钥由于没有添加,所以无法连接服务器。修改完保存之后,管理员gitadmin执行:

    git commit -am "created a new apps repo"
    git push

    push到服务端之后,立即生效。

      7.3 添加其他成员的公钥

    su gitadmin
    cd ~/gitproject/gitosis-admin/
    sudo cp user.pub key keydir/
    git add keydir/usr.pub
    git commit -am "granted a new user rights to apps"
    git push

      7.4 client端user连接gitserver

    su user
    cd ~/gitproject
    git remote add origin git@YOUR_SERVER:apps.git    #建立映射关系,或者直接如下,clone自动建立master的映射关系
    git clone git@YOUR_SERVER:apps.git  #之后就可以进行正常的git操作。最后push到服务器
    git push origin master:refs/heads/master

      搞定,现在,确保基本服务都开启之后,在server端打开  http://localhost/cgi-bin/gitweb.cgi,client端打开相应的http://servername/cgi-bin/gitweb.cgi。看看效果吧:

    debian下使用gitosis+gitweb搭建SSH认证的git服务器 - Zurphy - a[i]=i++

     
    8 参考阅读
    http://wiki.ubuntu.org.cn/index.php?title=Git%E6%9C%8D%E5%8A%A1%E5%99%A8Gitosis%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE&variant=zh-hans
    http://serverfault.com/questions/72732/how-to-set-up-gitweb
    http://blog.csdn.net/wirror800/article/details/5189564

    -------------------------------------------------------------------------------------------------------------------------- 生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
  • 相关阅读:
    《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
    《Machine Learning in Action》—— 女同学问Taoye,KNN应该怎么玩才能通关
    《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
    深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容
    《Machine Learning in Action》—— 浅谈线性回归的那些事
    《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
    《Machine Learning in Action》—— hao朋友,快来玩啊,决策树呦
    《Machine Learning in Action》—— 剖析支持向量机,优化SMO
    《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
    JVM 字节码指令
  • 原文地址:https://www.cnblogs.com/zurphy/p/4805148.html
Copyright © 2011-2022 走看看