前回の投稿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の設定(鍵の作成その他)
- Windows上で==git bash==を起動する
- sshコマンドで鍵を作成する。パスワード未入力とする。
ローカルに秘密・公開鍵が作成される。(*.pubが公開鍵)
$ ssh-keygen -t rsa -C "git_server_ssh_key"
ローカルに作成された秘密・公開鍵のペアに対して、適宜ファイル名を変更して、 ==公開鍵==をリモートサーバーにどうにかして転送する。
リモートサーバーにログインして公開鍵を==authorized_keys==に追記する
$ cat gitkey.pub>>authorized_keys
- ローカルの==ssh設定ファイル==(~/.ssh/config)にgit用のssh接続設定を追加する
Host git.hoge.com Port 22 User hoge Hostname git.hoge.com IdentitiesOnly yes IdentityFile ~/.ssh/gitkey
- 秘密鍵を使って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