Linux学習ノート(二):個人Gitサーバの構築
Gitの取り付け
詳細はGit公式チュートリアル
依存インストール
Gitバージョン:git version 1.8.3.1
コンパイルインストール
Git Hub releaseバージョンの選択
Gitの依存curl-devel expat-devel gettext-devel openssl-devel zlib-devel
ダウンロード、解凍、構成、コンパイル、インストールを行う
ここでは./configureはデフォルトの構成を直接使用していますが、実際にはyumと変わりません.
Gitバージョン:git version 2.2.0-rc 0 Gitユーザ を作成する.
アクセスを容易にするためにgitユーザーのアイデンティティを使用してコードウェアハウスを作成しますが、実際にはどのユーザーを使用しても構いません.git cloneの場合、git@server別のユーザー名に変更 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構成
だからauthorized_keysファイルは、許可されたクライアント公開鍵を保存するために使用されます.具体的には、SSHの原理「ssh-key」を作成する際に「passphrase」を使用すると、「SSH」の「method:publickey」方式で接続する際に、Enter passphrase for key'/home/git/.ssh/id_rsa'は、秘密保護ログインに違反しています.
authorized_keysはshellログインユーザーを許可する公開鍵を追加し、まず「server」から「client」にランダム数値を送信し、ユーザーは「client」で鍵を使用して乱数を暗号化した秘密文を返し、「server」で公開鍵復号を行い、元の乱数と比較して認証プロセスを完了する.テストpublickey方式登録
エラーが発生した場合は、debugのキーワードに基づいて検索します.その原因の大部分は2つに分けられます.基本構成 正常使用:sshd_config
ファイル権限の変更正常登録効果
ログイン後sshでknown_が生成されましたhosts shellログインを無効にする gitユーザーはコードアップロード専用なのでgitユーザーのログイン権限を無効にします
/sbin/nologinをgitユーザのログインshellとする、すなわちgitユーザshellログインを禁止する
ローカルウェアハウス
git initはローカルウェアハウスを構築するために使用され、工事で使用されるcommitはローカルウェアハウスに保存されます.
リモートウェアハウス
git init--bareはリモートウェアハウスを構築し、工事中にpushを使用してリモートウェアハウスにプッシュするために使用されます.初期化Git倉庫 前にgitユーザーを作成しましたが、gitユーザーのホームディレクトリは倉庫パスとして使用できます.
ここのgitウェアハウスはリモートウェアハウスです.ユーザーたちはpushコマンドを使用して更新をリモートウェアハウスにプッシュし、--bareオプションを使用してgit initを実行して裸のウェアハウスを構築します.
倉庫の接尾辞は全部です.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は読み書き動作を同時にサポートする唯一のネットワークプロトコルでもある.デフォルトプロトコルでもあります HTTP/Sプロトコル HTTPまたはHTTPSプロトコルの優美さは,架設の簡便性にある.基本的には、Gitの裸倉庫ファイルをHTTPのルートディレクトリの下に置き、特定のpost-updateフック(hook)を配置するだけで済む(Gitフックの詳細は7章参照).その後、Gitウェアハウスのあるサーバ上のウェブサービスにアクセスできる人は、クローン操作を行うことができます.
コードプルパスワード を使用
操作環境:windows clone仮想マシンのリモートウェアハウス SSH引き抜き 非デフォルトポートのSSHプロトコル引き抜きコード 設定構成情報
プロジェクトプッシュ 1プロジェクトpushから複数のリモートGit倉庫 へ
リモート・ウェアハウスの表示リモートウェアハウスに対応するベアウェアハウス を構築する.
リモートウェアハウスの追加
リモート・ウェアハウスの再表示
リモートウェアハウスの削除
この方式の複数のリモートウェアハウスは別々にプッシュする必要がある
複数の倉庫のバインドリモートウェアハウスに複数のurlアドレス を追加
修正を提出して、2つのリモート倉庫に送った.すべてのブランチを表示 リモートブランチ を削除する. Gitバージョンの選択 について
Gitのアップグレード戦略の多くは安全な更新であり、重大な新しい特性の更新は少なく、アップグレードはシステムの失効トラップを導入する可能性があり、これによって無駄な時間と精力は完全に必要ではない.
関連記事
Linux学习笔记(一):内网穿透Linux学习笔记(二):个人GitサーバーLinux学习笔记(三):UbuntuオペレーティングシステムLinux学习笔记(四):DockerLinux学习笔记(五):RedisLinux学习笔记(六):Linux
詳細は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 cloneの場合、git@server別のユーザー名に変更
[root@centos7 ~] adduser git
[root@centos7 ~] passwd git
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.
# 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」で公開鍵復号を行い、元の乱数と比較して認証プロセスを完了する.
[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 #
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=
/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ウェアハウスはリモートウェアハウスです.ユーザーたちはpushコマンドを使用して更新をリモートウェアハウスにプッシュし、--bareオプションを使用してgit initを実行して裸のウェアハウスを構築します.
倉庫の接尾辞は全部です.git
リモート・ウェアハウス・ディレクトリを作成し、空のウェアハウスを初期化
[root@centos7 ~] cd /home/git/
[root@centos7 ~] mkdir sea.git
[root@centos7 ~] git init --bare sea.git
使用
git init–bareメソッドは、git履歴が発行したバージョン情報のみを保存し、ユーザーが上記のgit操作を行うことを許可しないため、裸倉庫と呼ばれるいわゆる裸倉庫を作成します.無理に操作すると、次のエラーが発生します.
This operation must be run in a work tree
プロジェクト引き出し
契約の概要
これはGitパッケージに含まれる特殊なデーモンプロセスです.SSHサービスのような特定のポート(9418)をリスニングし、ライセンスを必要としません.Gitプロトコルをサポートするウェアハウスでは、git-daemon-export-okファイルを作成する必要があります.これはプロトコルプロセスがウェアハウスサービスを提供するために必要な条件ですが、それ以外のセキュリティ対策はありません.全員がGit倉庫をクローンできるか、誰もできないか.これは、このプロトコルが通常プッシュに使用できないことを意味します.プッシュ操作を許可できます.しかし、ライセンスメカニズムがないため、この操作が許可されると、ネットワーク上のプロジェクトのURLを知っている人にはプッシュ権限があります.
[root@centos7 ~] git clone ssh://user@server/project.git
[root@centos7 ~] git clone user@server:project.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.
[root@centos7 ~] git clone [email protected]:/home/git/sea.git
# Cloning into 'test1.git'...
# done.
# warning: You appear to have cloned an empty repository.
[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
プロジェクトプッシュ
リモート・ウェアハウスの表示
[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)
この方式の複数のリモートウェアハウスは別々にプッシュする必要がある
複数の倉庫のバインド
[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のアップグレード戦略の多くは安全な更新であり、重大な新しい特性の更新は少なく、アップグレードはシステムの失効トラップを導入する可能性があり、これによって無駄な時間と精力は完全に必要ではない.
関連記事
Linux学习笔记(一):内网穿透Linux学习笔记(二):个人GitサーバーLinux学习笔记(三):UbuntuオペレーティングシステムLinux学习笔记(四):DockerLinux学习笔记(五):RedisLinux学习笔记(六):Linux