Linux学習ノート(二):個人Gitサーバの構築

10963 ワード

Gitの取り付け
詳細はGit公式チュートリアル
依存インストール
[root@centos7 ~] yum install git
[root@centos7 ~] git --version

Gitバージョン:git version 1.8.3.1
コンパイルインストール
Git Hub releaseバージョンの選択
Gitの依存curl-devel expat-devel gettext-devel openssl-devel zlib-devel
ダウンロード、解凍、構成、コンパイル、インストールを行う
[root@centos7 ~] yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@centos7 ~] wget https://codeload.github.com/git/git/tar.gz/v2.20.0-rc0
[root@centos7 ~] tar -xvf v2.20.0-rc0
[root@centos7 ~] make configure
[root@centos7 ~] ./configure
[root@centos7 ~] make && make install

ここでは./configureはデフォルトの構成を直接使用していますが、実際にはyumと変わりません.
[root@centos7 ~] git --version

Gitバージョン:git version 2.2.0-rc 0
  • Gitユーザ
  • を作成する.
    アクセスを容易にするためにgitユーザーのアイデンティティを使用してコードウェアハウスを作成しますが、実際にはどのユーザーを使用しても構いません.git cloneの場合、git@server別のユーザー名に変更
    [root@centos7 ~] adduser git
    [root@centos7 ~] passwd git
  • GitのSSHプロトコルはSSH key秘密認証
  • を使用する.
    The authorized_keys file in SSH specifies the SSH keys that can be used for logging into the user account for which the file is configured.
  • centos 7のssh構成
  • # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
    # but this is overridden so installations will only check .ssh/authorized_keys
    AuthorizedKeysFile      .ssh/authorized_keys

    だからauthorized_keysファイルは、許可されたクライアント公開鍵を保存するために使用されます.具体的には、SSHの原理「ssh-key」を作成する際に「passphrase」を使用すると、「SSH」の「method:publickey」方式で接続する際に、Enter passphrase for key'/home/git/.ssh/id_rsa'は、秘密保護ログインに違反しています.
    [root@centos7 ~] su git
    [root@centos7 ~] ssh-keygen -t rsa
    [root@centos7 ~] cat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys
    [root@centos7 ~] chmod 700 /home/git/.ssh
    
    +---[RSA 2048]----+    
    |o. +XE=o.        |    # -t:        (rsa、dsa、ecdsa )
    |o.=+=*=          |    # -P:  passphrase,             
    | . . o B o       |    # -f:           
    |  .   = .        |
    |o+.oo* o o       |    
    |o o ..+ + .      |    # authorized_keys    #           
    |.  o +.oS. .     |    # known_hosts        #          ID
    |.   o B.+ .      |    # id_rsa.pub         #    
    |       .         |    # id_rsa             #    
    +----[SHA256]-----+
    

    authorized_keysはshellログインユーザーを許可する公開鍵を追加し、まず「server」から「client」にランダム数値を送信し、ユーザーは「client」で鍵を使用して乱数を暗号化した秘密文を返し、「server」で公開鍵復号を行い、元の乱数と比較して認証プロセスを完了する.
  • テストpublickey方式登録
  • [root@centos7 ~] ssh -vv [email protected]  #      

    エラーが発生した場合は、debugのキーワードに基づいて検索します.その原因の大部分は2つに分けられます.
    1. SSH     
    2.       
    
  • 基本構成
  •     StrictModes                     no                           #      
        
        RSAAuthentication               yes                          #  RSA  
            
        PubkeyAuthentication            yes                          #      
        
        AuthorizedKeysFile              .ssh/authorized_keys         #ssh    
        
        PasswordAuthentication          yes                          #      
  • 正常使用:sshd_config
  •     Protocol                         2
    
        SyslogFacility                   AUTH
    
        LogLevel                         debug
    
        PermitRootLogin                  yes
    
        RSAAuthentication                yes
    
        PubkeyAuthentication             yes
    
        AuthorizedKeysFile               .ssh/authorized_keys
    
        PasswordAuthentication           yes
    
        ChallengeResponseAuthentication  no
    
        GSSAPIAuthentication             yes
    
        GSSAPICleanupCredentials         yes
    
        UsePAM                           yes
    
        AcceptEnv                        LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    
        AcceptEnv                        LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    
        AcceptEnv                        LC_IDENTIFICATION LC_ALL LANGUAGE
    
        AcceptEnv                        XMODIFIERS
    
        X11Forwarding                    yes
    
        Subsystem                        sftp    /usr/libexec/openssh/sftp-server
    

    ファイル権限の変更
    [root@centos7 ~] chmod 700 /home/git/.ssh
    [root@centos7 ~] chmod 600 /home/git/.ssh/authorized_keys
  • 正常登録効果
  • [root@centos7 ~]$ ssh [email protected]
    
    The authenticity of host '104.199.134.0 (104.199.134.0)' can't be established.
    ECDSA key fingerprint is SHA256:49g0X6kyudjfjCa/QBoZwf0mbPZnFphYjMRV/LrQPpQ.
    ECDSA key fingerprint is MD5:cc:ef:83:ab:e4:33:00:9e:0f:62:87:df:62:01:73:62.
    Are you sure you want to continue connecting (yes/no)? 

    ログイン後sshでknown_が生成されましたhosts
    [root@centos7 ~]$ vim /home/git/.ssh/known_hosts
    
    104.199.134.0 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABEBPA/O+a8s92uinv3NKnVzGqaohbX6vqDVGMoE5vs+PuT7NXivy5aSkRutROcN/H8AhnBLaK5HWGsqwBRw8FXgSY=
  • shellログインを無効にする
  • gitユーザーはコードアップロード専用なのでgitユーザーのログイン権限を無効にします
    /sbin/nologinをgitユーザのログインshellとする、すなわちgitユーザshellログインを禁止する
    [root@centos7 ~] usermod -s /sbin/nologin git   #  shell  
    [root@centos7 ~] usermod -s /bin/bash git       #    shell

    ローカルウェアハウス
    [root@centos7 ~] su - git
    [root@centos7 ~] git init sea.git

    git initはローカルウェアハウスを構築するために使用され、工事で使用されるcommitはローカルウェアハウスに保存されます.
    リモートウェアハウス
    [root@centos7 ~] su - git
    [root@centos7 ~] git init --bare sea.git

    git init--bareはリモートウェアハウスを構築し、工事中にpushを使用してリモートウェアハウスにプッシュするために使用されます.
  • 初期化Git倉庫
  • 前にgitユーザーを作成しましたが、gitユーザーのホームディレクトリは倉庫パスとして使用できます.
    ここのgitウェアハウスはリモートウェアハウスです.ユーザーたちはpushコマンドを使用して更新をリモートウェアハウスにプッシュし、--bareオプションを使用してgit initを実行して裸のウェアハウスを構築します.
    倉庫の接尾辞は全部です.git
    リモート・ウェアハウス・ディレクトリを作成し、空のウェアハウスを初期化
    [root@centos7 ~] cd /home/git/
    [root@centos7 ~] mkdir sea.git
    [root@centos7 ~] git init --bare sea.git
    
  • 普通倉庫と裸倉庫の違い
  • gitはローカル開発のバージョン管理だけでなく、チームと書く反復開発もできます.通常の倉庫にはエンジニアリングコード、バージョン履歴が保存され、リモートの裸倉庫であるバージョンライブラリにはバージョン履歴が記録されたファイルのみが含まれます.
    使用
    git init–bareメソッドは、git履歴が発行したバージョン情報のみを保存し、ユーザーが上記のgit操作を行うことを許可しないため、裸倉庫と呼ばれるいわゆる裸倉庫を作成します.無理に操作すると、次のエラーが発生します.
    This operation must be run in a work tree
    プロジェクト引き出し
    契約の概要
  • ローカルプロトコル
  • いわゆるリモートウェアハウスは、このプロトコル(Local protocol)で表され、ハードディスク上の別のディレクトリです.これは、チームの各メンバーが共有するファイルシステム(例えばNFS)にアクセス権を持っている場合や、同じコンピュータを共有している人が少ない場合によく見られます.
  • Gitプロトコル
  • Gitプロトコルをプロジェクトにアクセスする唯一の方法として使用することは、通常望ましくない.一般的な方法は、SSHインタフェースを同時に提供し、いくつかの開発者にプッシュ(書き込み)権限を持たせ、他の人はgit://を通じて読み取り専用権限を持たせることです.
    これはGitパッケージに含まれる特殊なデーモンプロセスです.SSHサービスのような特定のポート(9418)をリスニングし、ライセンスを必要としません.Gitプロトコルをサポートするウェアハウスでは、git-daemon-export-okファイルを作成する必要があります.これはプロトコルプロセスがウェアハウスサービスを提供するために必要な条件ですが、それ以外のセキュリティ対策はありません.全員がGit倉庫をクローンできるか、誰もできないか.これは、このプロトコルが通常プッシュに使用できないことを意味します.プッシュ操作を許可できます.しかし、ライセンスメカニズムがないため、この操作が許可されると、ネットワーク上のプロジェクトのURLを知っている人にはプッシュ権限があります.
  • SSHプロトコル
  • SSHは読み書き動作を同時にサポートする唯一のネットワークプロトコルでもある.デフォルトプロトコルでもあります
    [root@centos7 ~] git clone ssh://user@server/project.git
    [root@centos7 ~] git clone user@server:project.git
  • HTTP/Sプロトコル
  • HTTPまたはHTTPSプロトコルの優美さは,架設の簡便性にある.基本的には、Gitの裸倉庫ファイルをHTTPのルートディレクトリの下に置き、特定のpost-updateフック(hook)を配置するだけで済む(Gitフックの詳細は7章参照).その後、Gitウェアハウスのあるサーバ上のウェブサービスにアクセスできる人は、クローン操作を行うことができます.
    コードプル
  • パスワード
  • を使用
    操作環境:windows clone仮想マシンのリモートウェアハウス
    [root@centos7 ~] git clone [email protected]:/home/git/sea.git
    
    # Cloning into 'sea'...
    # [email protected]'s password:
    # warning: You appear to have cloned an empty repository.
  • SSH引き抜き
  • [root@centos7 ~] git clone [email protected]:/home/git/sea.git
    
    # Cloning into 'test1.git'...
    # done.
    # warning: You appear to have cloned an empty repository.
  • 非デフォルトポートのSSHプロトコル引き抜きコード
  • [root@centos7 ~] git clone ssh://[email protected]:14726/home/git/star.git
  • 設定構成情報
  • [root@centos7 ~] git config --global user.email "sea.star.com"
    [root@centos7 ~] git config --global user.name "sea"
    [root@centos7 ~] git config --global -- list
    
    # [email protected]
    # user.name=sea

    プロジェクトプッシュ
  • 1プロジェクトpushから複数のリモートGit倉庫

  • リモート・ウェアハウスの表示
    [root@centos7 ~] git remote -v
    
    # origin    [email protected]:/home/git/sea.git (fetch)
    # origin    [email protected]:/home/git/sea.git (push)
  • リモートウェアハウスに対応するベアウェアハウス
  • を構築する.
    [root@centos7 ~] git init --bare star.git

    リモートウェアハウスの追加
    [root@centos7 ~] git remote add star ssh://[email protected]:14726/home/git/star.git

    リモート・ウェアハウスの再表示
    [root@centos7 ~] git remote -v
    
    # origin    [email protected]:/home/git/sea.git (fetch)
    # origin    [email protected]:/home/git/sea.git (push)
    # upstream    ssh://[email protected]:14726/home/git/star.git (fetch)
    # upstream  ssh://[email protected]:14726/home/git/star.git (push)
    

    リモートウェアハウスの削除
    [root@centos7 ~] git remote rm upstream
    [root@centos7 ~] git remote -v
    
    # origin    [email protected]:/home/git/sea.git (fetch)
    # origin    [email protected]:/home/git/sea.git (push)

    この方式の複数のリモートウェアハウスは別々にプッシュする必要がある
    複数の倉庫のバインド
  • リモートウェアハウスに複数のurlアドレス
  • を追加
    [root@centos7 ~] git remote set-url --add origin ssh://193.29.97.25:/home/git/taskv2.git
    [root@centos7 ~] git remote -v
    
    # origin    [email protected]:/home/git/sea.git (fetch)
    # origin    [email protected]:/home/git/sea.git (push)
    # origin    [email protected]:/home/git/sea.git (push)

    修正を提出して、2つのリモート倉庫に送った.
    [root@centos7 ~]$ git push origin master
    
    #     Enumerating objects: 4, done.
    #     Counting objects: 100% (4/4), done.
    #     Compressing objects: 100% (2/2), done.
    #     Writing objects: 100% (3/3), 271 bytes | 271.00 KiB/s, done.
    #     Total 3 (delta 1), reused 0 (delta 0)
    #     To ssh://104.199.134.0:/home/git/star.git
    #        b0785b2..5db23a4  master -> master
    
    #     Enumerating objects: 4, done.
    #     Counting objects: 100% (4/4), done.
    #     Compressing objects: 100% (2/2), done.
    #     Writing objects: 100% (3/3), 271 bytes | 271.00 KiB/s, done.
    #     Total 3 (delta 1), reused 0 (delta 0)
    #     To ssh://93.179.97.24:27038/home/git/star.git
    #        b0785b2..5db23a4  master -> master
    
  • すべてのブランチを表示
  • git branch -a
    
      bug
      doc
    * master
      remotes/origin/bug
      remotes/origin/doc
      remotes/origin/master
  • リモートブランチ
  • を削除する.
    git push branch :branchname
    
    To ssh://127.0.0.1/home/git/repository.git
     - [deleted]           branchname
  • Gitバージョンの選択
  • について
    Gitのアップグレード戦略の多くは安全な更新であり、重大な新しい特性の更新は少なく、アップグレードはシステムの失効トラップを導入する可能性があり、これによって無駄な時間と精力は完全に必要ではない.
    関連記事
    Linux学习笔记(一):内网穿透Linux学习笔记(二):个人GitサーバーLinux学习笔记(三):UbuntuオペレーティングシステムLinux学习笔记(四):DockerLinux学习笔记(五):RedisLinux学习笔记(六):Linux