サーバ管理者と開発者がいる状態で、開発者にはgit以外のサーバ上コンテンツにはアクセスさせない環境を構築する。WEBアクセスなどは必要なくssh接続のみで小規模な開発環境を作成する場合に最適なパターン。
GitHubを使っても良いけど古いサーバマシンやVPSの余力がある場合に最適。
制限されたgit用のユーザを作成する
git-shellの確認
git-shell というgit操作のみに特化したshellが存在する。(通常はサーバにgitをインストールし時に一緒にインストールされる)
which git-shell
で存在を確認する。
sudo vi /etc/shells
の内容を確認して、git-shell があることを確認。ない場合は、このファイルにパスを追加する。(例: /usr/bin/git-shell )
ユーザ 「git」 の作成
gituser を追加して、git-shell がログインshellとなるように設定する。
sudo useradd -m -s /usr/bin/git-shell git
ローカルPCで、ssh用鍵の生成(対話式で必要な情報の入力)
ssh-keygen -t rsa -b 4096 -C "git"
サーバにパブリックキーのセット
$ sudo mkdir /home/git/.ssh
$ sudo chown git:git /home/git/.ssh
$ sudo chmod 700 /home/git/.ssh
$ sudo cp どこかのパス/git.pub /home/git/.ssh/authorized_keys
$ sudo chown git:git /home/git/.ssh/authorized_keys
sudo chmod 600 /home/git/.ssh/authorized_keys
複数のユーザでgitの更新ができるようにグループの作成とリポジトリディレクトリへのグループ権限の付与を行う。
$ sudo groupadd gitgrp
$ sudo usermod -aG gitgrp xxx
$ sudo usermod -aG gitgrp git
$ sudo chgrp -R gitgrp /opt/git/
$ sudo chmod -R g+rw /opt/git/
$ sudo chmod g+s /opt/git/
$ ls -al /opt
drwxr-xr-x 16 root root 4096 3月 17 14:34 .
drwxr-xr-x 19 root root 4096 3月 9 00:43 ..
drwxrwsr-x 2 root gitgrp 4096 3月 17 14:34 git
$ mkdir /opt/git/repo
git ベアリポジトリの作成
まずは、サーバで、ディレクトリを作成し、git init –bare を行う。
git に登録するデータの登録
構成管理のディレクトリで git init を実行。
.gitignore を編集して、必要な対象を設定。
git add . で対象ファイルを登録。
git commit -m “First commit” でコミット。
git リモートの登録
git remote add origin <リポジトリURL>
同一のサーバ内の場合は、パス名でOK
あとは、git に必要なファイルをコミットして、push する。
git push -u origin master
-u は、以降pushのみでOKになるためにつけておく
各人のローカル git
git clone <ホスト名>:/var/git/<git ディレクトリ> <ローカルパス>
<~/.ssh/config>
Host <ホスト名>
HostName <接続先ホスト> xxx.com など
User <ユーザー名>
Port <ポート番号> SSHのポート 通常は22
IdentityFile <秘密鍵のパス>
端末からgit clone すると、以下のエラーがでることがある。
所有者がユーザと異なる場合に発生する。
サーバーの該当ユーザ(この場合)git で、以下を登録する必要がある。(端末側で設定しても意味がない)
git config –global –add safe.directory /var/git/xxxxxx
fatal: detected dubious ownership in repository at '/var/git/xxxxxxx'
To add an exception for this directory, call:
git config –global –add safe.directory /var/git/xxxxxx
fatal: Could not read from remote repository.
この操作には、ログインshellを切替える必要がある。
chsh -s /bin/sh
最後は、git-shell に戻すことを忘れずに!
git のリモート設定の確認方法
git remote -v
コメント