ssh接続できるgitリモートリポジトリの構築

前回の投稿node.jsの"git-http-backend"を試すでは、http接続できるgitサーバーの構築方法を投稿した。

今回は、sshサーバーがすでに稼動しているサーバー上で、ssh接続できるGITリポジトリ構築方法に関する備忘録を記す。
基本的にこの方法がセキュアなので上記のhttp接続よりもお勧めで、わざわざnode.jsのhttpサーバーを構築する必要がなくなる。

前提条件として、接続するリモートサーバーでsshサーバーが稼動している必要がある。構築方法としては、Ubuntu 12.04 サーバー構築2 ( openssh-server )を参照。

以下は、Windowsクライアント上で、sshの秘密・公開鍵を作成し、公開鍵を登録してssh接続でgitのリモート操作を行えるようにするまでの手順を記す。

SSHの設定(鍵の作成その他)

  1. Windows上で==git bash==を起動する
  2. sshコマンドで鍵を作成する。パスワード未入力とする。 ローカルに秘密・公開鍵が作成される。(*.pubが公開鍵)
    $ ssh-keygen -t rsa -C "git_server_ssh_key"
    
  3. ローカルに作成された秘密・公開鍵のペアに対して、適宜ファイル名を変更して、 ==公開鍵==をリモートサーバーにどうにかして転送する。

  4. リモートサーバーにログインして公開鍵を==authorized_keys==に追記する

    $ cat gitkey.pub>>authorized_keys
    
  5. ローカルの==ssh設定ファイル==(~/.ssh/config)にgit用のssh接続設定を追加する
    Host git.hoge.com
         Port 22
         User hoge
         Hostname git.hoge.com
         IdentitiesOnly yes
         IdentityFile ~/.ssh/gitkey
    
  6. 秘密鍵を使ってGit Bashからsshログインできるか確認する
    $ ssh git.hoge.com
    

リモートリポジトリの作成

重要なのは、作成時にオプション--sharedを追加しておくこと

> git init --bare --shared /home/hoge.git

sshでリモートリポジトリへアクセスする

とりあえず、適当なローカルリポジトリを作成してpushできるか確認 ポイントはリポジトリ名をフルパスで指定すること。 バグなのか仕様なのか不明だが、authorized_keysに ほかの鍵が複数追加されていると、フルパスで指定しないとリポジトリが 見つけられなくてエラーになる。

> git init xxx
> cd xxx
> echo hello>hello.txt
> git add hello.txt
> git commit -m "hello"
> git push git.hoge.com:/home/hoge.git

同様に別のフォルダへcloneを作成してみる

> cd ../
> git clone git.hoge.com:/home/hoge.git ooo