プライベートなgitサーバーを立てたいのだけど、git:// とかではなく、ssh:// でやりたいなーと思いまして。
なのでgit-daemonは使わず、gitosisを使ってみたいと思います。
つまり、公開鍵だけもらってユーザー毎にアクセス権限管理とかしたいわけです。
個人的用途なのにアクセス権限とか・・どういうことなの・・・
webのインターフェイスは今のところ考えていません。
“%”がリモートサーバーで“$”がローカルPCのプロンプトです。
サーバーにyumからインストールしてgitosisの初期設定をします。
% yum update git % yum install gitosis % useradd git % passwd git % cd /home/git % sudo -H -u git gitosis-init < id_dsa.pub Initialized empty Git repository in ./ Reinitialized existing Git repository in ./ % ls -la gitosis/ .gitosis.conf repositories/ .ssh/
自分のPCでgitosis-adminをgit cloneします。
$ git clone ssh://git@example.com/gitosis-admin.git $ cd gitosis-admin $ ls gitosis.conf keydir
リポジトリ管理者を追加します。基本的に自分だけ。複数ユーザを設定できます。必要なものは公開鍵で、これをpushすることになります。
$ vi gitosis.conf [gitosis] [group gitosis-admin] writable = gitosis-admin members = runeleaf fuga $ cp id_rsa_fuga.pub keydir/fuga.pub $ git add . $ git ci -m 'add admin' $ git push
うまいことhooks/post-updateで.sshに公開鍵を追加しているんですね。
個人で使うリポジトリを追加してみます。
$ vi gitosis.conf [group fuga] writable = foo/bar/baz members = fuga $ git add . $ git ci -m 'add private repo' $ git push
自分のPCで試しに作ってpushしてみます。
$ cd ../ $ mkdir my-repo $ cd my-repo $ git init $ cat > README test $ git add . $ git ci -m 'init' # gitosis.confにwritable(foo/bar/baz)を追加しておく $ git remote add origin ssh://git@example.com/foo/bar/baz.git $ git push origin master
ここまでやれば大体良かったのですが、gitサーバー自身にgit cloneしようしてもうまい事できなかったので(なんかもっと良い方法がありそうだけど)、自分自身でも同じようにgit cloneしたりpushしたりできるようにしてみます。
ようはローカルでしか使わない鍵をつくっただけ。
% ssh-keygen -P "" -t dsa -f id_dsa_local % mv id_dsa_local .ssh/ % vi .ssh/config Host example.com User git Hostname localhost IdentityFile ~/.ssh/id_dsa_local
作成した公開鍵、id_dsa_local.pubの内容をコピーするかローカルマシンにダウンロードして追加。
$ cd gitosis-admin $ cp ~/id_dsa_local.pub keydir/local.pub $ vi gitosis.conf [group fuga] writable = foo/bar/baz test/lib members = fuga local $ git add . $ git ci -a -m 'add local' $ git push origin master
これでgitサーバー自身にログインしてローカルマシンと同じようにcloneしたりpushしたり。
% git ssh://git@example.com/test/lib.git test-lib % cd test-lib % touch test.txt % git add . % git ci -a -m 'add test.txt' % git push
こんなんでいいのかなぁ・・
自分しか使わないし、いいよね。