• 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

    -------------------------------------------------------------------------------------------------------------------------- 生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
  • 相关阅读:
    表单之input的样式修改
    文本省略和文本垂直居中展示
    text-align:justify的使用
    10- 禅道使用
    09- 软件缺陷
    08- 测试用例详解
    07- 场景分析法
    01- Python语言简介
    08. linux下 mv find grep命令
    1.4.19- HTML标签之注释标签
  • 原文地址:https://www.cnblogs.com/zurphy/p/4805148.html
Copyright © 2020-2023  润新知