外部から ssh を使って Git リポジトリにアクセス可能にする

公式 を見ながらやる。今回は ssh を使って接続する方法をとるが、Git へのアクセスを制御する方法は腐るほどあるようで、リストが ここ にある。

$ sudo adduser git
$ sudo su git
git$ cd
git$ mkdir .ssh
git$ chmod 700 .ssh
git$ cat pubkey >> .ssh/authorized_keys
git$ chmod 600 .ssh/authorized_keys
git$ exit
$ which git-shell
/usr/bin/git-shell
$ sudo vim /etc/passwd
- git:x:1000:1000::/home/git:/bin/bash
+ git:x:1000:1000::/home/git:/usr/bin/git-shell

上記の設定をすると $ sudo su git でも git としてログインできなくなる ので、新しいディレクトリを作成するなどは sudoer が行う。その際に chown -R git:git しておくのを忘れないように。→ 記事末尾の追記参照

$ sudo su -
# cd /home/git/
# mkdir testrepo
# cd ~/testrepo
# git init --bare  # You cannot push to non-bare repo.
# cd /home/git/
# chown -R git:git testrepo
# exit

2014-02-11 追記

ludobile 氏に指摘をいただいた

  • ログインシェルとして git-shell が指定されている状態でも $ sudo su git -s /bin/bash とすれば指定されているログインシェルを無視して bash でログインできる。

ご指摘ありがとうございます!

2016-01-06 追記

Redmineリポジトリにデフォルトで表示されるブランチを develop に変更したい。Redmine は HEAD を見にいっているっぽいので remote/HEAD を remote/develop に変更すればよい。local でやるだけではダメで remote でやらなければならない。

Initial push をしたのちに、remote のリポジトリに行って次のコマンドを打てば OK。

$ git symbolic-ref HEAD refs/heads/develop