2013年8月8日木曜日

UbuntuにGitをセットアップしてWindowsから接続する

自前のGitサーバが欲しくなり設定したのでその方法をまとめる。今回の環境は以下。

・Gitサーバ
Ubuntu 12.04.2 LTS

・Windowsクライアント
Windows 7 64bit


Ubuntu認証用のSSHキーを用意する
WindowsでSSHキーを用意するにはPuTTYgenを使ったりする方法もあるけれど、git bashからもさくりと作れるので今回はそちらで。git bashをまだインストールしていない場合はGit for Windowsをインストールしよう。

インストールできたら「Git Bash」があるのでそちらを叩いて起動する。初期作業位置はc:\Users\your nameかc:\Users\your name\Documentsなどになっているはずである。さっそくSSHキーを下記のコマンドから生成する。
※your nameは自分のユーザ名で置き換えてもらいたい。

$ ssh-keygen

そうすると以下の内容が出力されるので順々に必要な項目をタイプする。
Generating public/private rsa key pair.
Enter file in which to save the key (/c/users/your name/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Vera vera vera vera ....

/c/users/your name/.ssh/id_rsaの場所はgit sshから参照されるので名前と場所を変更しないように。エンターキーでpassphraseの入力に移ろう。passphraseは入力しなくてもかまわないがセキュリティの観点から入力するのが望ましい。

さて、c:\Users\your name\.sshを参照するとid_rsaとid_rsa.pubができているはずだ。とりあえずWindowsのセットアップはここまでにしてGitサーバをたてる。


Gitサーバをたてる
サーバセットアップまでは以下をそのまま参考してもらいたい。
4.4 Git on the Server - Setting Up the Server

一応手順を訳すとこうなる。

1、サーバにGitをインストールする
$ apt-get install git

2、'git'ユーザを作り、そのユーザ用の.sshディレクトリを作る
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh

3、Windowsで作ったid_rsa.pubを/home/git/に持ってくる
コピーするなりFTPで渡すなりしてもらいたい。

4、(サーバに複数ユーザいる場合は他のユーザのホームディレクトリに作らないように注意!)gitユーザのhomeの.sshにauthorized_keysファイルを作る
$ cat id_rsa.pub >> /home/git/.ssh/authorized_keys

.sshとauthorized_keysの権限は以下のようにしておく必要があるので注意してほしい。
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys

authorized_keysを作った後はid_rsa.pubは不要なので削除する
$ rm id_rsa.pub

ちなみに複数ユーザを追加する場合はユーザ分のid_rsa.pubをどんどんauthorized_keysに追加していくだけでよい。

この時点でWindowsからgitサーバにSSHでログインできるはずなので、Windowsに戻ってGit Bashから以下のコマンドを試してもらいたい。
$ ssh git@your domain.com
※your domain.comは自分のドメイン名に変更してもらいたい。

ここでPermission deniedされる場合はSSHのキーがへぼっている可能性があるのでキー作成からやり直して再度authorized_keysにpublic key(id_rsa.pub)を追加してもらいたい。

5、Git用の作業ディレクトリを作る
それぞれのリポジトリ用に空のディレクトリを用意する必要がある。git initを--bareオプションで行う。
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git --bare init
必要に応じてどんどんディレクトリを増やしていこう。

project.gitのオーナーがgitになっていることを確認しよう。もしもなっていない場合は以下コマンドで変更しておこう。
$ chown -R git:git project.git

いざcommit
さてこれで準備がととのったので再度WindowsにもどりGit Bashから下記のコマンドを実行してみよう。
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@your domain.com:/opt/git/project.git
$ git push origin master

これで他の端末にcloneすることもできるようになったので、他の端末から下記のコマンドを実行してみよう。
$ git clone git@your domain.com:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master


まとめ
SSH周りにはまるとアホみたいに時間がかかるけれど、それさえなければ一時間もかからずにGitサーバを用意してリポジトリをどんどん追加できるはずだ。SSH周りの認証がうまくいかない場合は下手に色々といじくるよりも手順を最初からやり直したほうが早いことが往々にしてあるのでそれを試してみるとよいだろう。