Hatena::ブログ(Diary)

Lism.in * blog - nekoya (id:studio-m) RSSフィード

2007-07-02

Subversionのリポジトリをsvn+sshで管理する

通常Subversionを使う場合、-dオプションを付けてsvnserveデーモンとして起動しておく必要があります。ですが、SSH経由でSubversionを利用する場合はsvn+sshによる接続時にsvnserve -tとトンネルモードでsvnserveが起動されるため、あらかじめ起動しておく必要はありません。

パスワード認証でsvn+ssh通信する場合はそれほど特別な設定をせずとも、svn+ssh://user@host/repos/hogeリポジトリにアクセスできます。が、鍵認証を使用する場合は少し手を入れてやらなければいけません。新たに鍵認証を使用するサンプルはわりと見付かるのですが、普段から鍵認証を使用している場合にSubversionの設定を追加する方法はあまり解説されていないので、自分のやった設定をメモしておきます。

リポジトリパーミッション設定

この作業はリポジトリを設置したサーバで行います。リポジトリへのアクセスはグループ権限で行います。ここでは、subversionグループを作成し、リポジトリへのアクセス権限を設定するため、以下のコマンドをrootで実行します。

# groupadd subversion ← グループ作成
# usermod -G subversion user ← userをsubversionグループに追加
# cd /usr/local/svn
# chgrp -R subversion . ← 所有グループの変更
# chmod -R 770 . パーミッション設定
# chmod -R g+s . ← setgidビット設定
# umask 002 ← umask設定

Subversion用のSSH鍵を作る

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): ← そのままEnter
Enter passphrase (empty for no passphrase): パスフレーズを入力
Enter same passphrase again: パスフレーズをもう一度入力

これでid_rsa(秘密鍵)とid_rsa.pub(公開鍵)を作成します。次に、~/.ssh/authorized_keysに新しく作った公開鍵の情報を追加します。viで開いて、追加する行の先頭に、

command="/usr/bin/svnserve -t -r /usr/local/svn" ssh-rsa (公開鍵情報)

のように接続時のコマンドを指定します。これで、この鍵を使って接続した時に指定のコマンドが実行されます。この例では、svnserveトンネルモードで起動するオプションと、リポジトリのルートディレクトリの指定を入れています。

秘密鍵は適当な名前に変えて自分の環境に持ってきます。リポジトリへの接続はこの秘密鍵を使用します。

環境変数SVN_SSHを設定

ここからの作業は、リポジトリに接続する側のサーバで行います。

次に、接続時のSSHコマンドを環境変数SVN_SSHに設定します。

export SVN_SSH="ssh -l user -i /home/user/.ssh/subversion.ppk"

これを~/.bashrcに追加します。これでsvn+ssh://〜で接続する時のsshコマンドを設定します。

この部分の設定は、svnserve.confの[tunnels]セクションに設定を追加することで、複数の接続コマンドを使い分けることが可能です(試してないけど)。詳しくはsvnserve, 専用サーバ|Subversion によるバージョン管理をどうぞ。

これで、

svn co svn+ssh://user@host/repos/hoge/trunk .

のようにSSH経由でリポジトリにアクセスできるようになります。

この設定だと、チェックアウトやコミットの度にパスフレーズを入力しないといけませんが、このあたりはセキュリティトレードオフなので何とも言えないところです。前述のリンクを参考にSubversion用の鍵での権限を適切に設定した上で、パスフレーズなしでアクセスできるようにする、というのが妥当な線かも知れません。

■参考書籍

パーミッションの設定はこの本を参考にやってます。若干書き方が薄いけど、とっかかりとしてはいい資料かと。

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

btobto 2007/07/02 20:30 なんでこんな面倒なことするんでしょう
普通にいつも使ってるssh経由でアクセスすればいいだけだと思います
svn co svn+ssh://hoge/repos/hoge/trunk .
こんな面倒な設定も必要ないです

パスワード入力が必要なのも svnserve 経由でやるからです
普通に ssh でアクセスするようにすれば、ssh-agent とか使えば毎回パスワード入力する必要もなくなりますよ

svnserve 使うんだったら WebDAV+SSL+Basic認証 の方がいい気が...
そっちの方がブラウザでもアクセスできるし

studio-mstudio-m 2007/07/03 10:54 コメントありがとうございます。
オフラインであれこれ質問させてもらって、勉強になりました。
自分でも把握しきれていない部分など多々あるので、
また調べて改めてエントリにまとめたいと思いますー

kompirokompiro 2008/04/09 22:52 環境変数SVN_SSHを設定という節でタイポですね。
exprot→exportです。

studio-mstudio-m 2008/04/09 23:38 修正しました。チェックありがとうございます。
他にもいろいろ直したいところはあるけど、ひとまずtypo修正。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証