結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

SubversionをSSHで利用する(2)(svn+ssh)


前回の続きです。
今回はパスワードによるSSHSVNを使用するところまで
やりたいと思います。


まずは動作原理について話しておきましょう。


クライアントがSSHサーバに接続すると以下の処理が行われます。

処理1:指定されたユーザ名でサーバにログインする
処理2:そのユーザ権限でsvnserve -t(トンネルモード)が
    実行されデーモンを起動させる。
処理3:Subversionがリポジトリにアクセスする。


上記からわかることは

1.SSHクライアントが必要である
2.SSHサーバが必要である
3.指定ユーザがsvnserve -tを実行できる権限を持っている
 必要がある
4.リポジトリを利用するユーザ全員がリポジトリに対する
 読み取りと書き込みの権限を持っている必要がある。
5.他のユーザが書き込んだファイルを、そのほかのユーザが
 読み書きできる必要がある。


ここで1.については、今回はTortoiseSVNを使用しており、
TortoiseSVNはTortoisePlinkというSSHクライアントが
付属されているので、特に設定は必要ありません。


2.についてはまた違う話になるのでここでは割愛します。
OpenSSHとかで検索かければいっぱいインストール方法を
解説したページが出てくるのでそちらを見てください。


3.では適切に権限を設定します。
自分の環境ではデフォルトで755になってましたので
特に設定は必要ありませんでした。


いちおうコマンドを書いときます。

  chmod 755 /usr/bin/svnserve


4.と5.は接続するユーザが全て同じグループに属し、SSH経由で接続する際に
umaskに002を使う必要があります。また、リポジトリディレクトリに対して
グループのsetgidを設定する必要があります。


ここでは1.2.3.は終わっているものとして話をします。
まずグループを作成し、リポジトリを利用するユーザの
グループを変更しましょう。


usermodの-Gオプションには注意してください。
この-Gオプションにtaiyakisunがすでに所属していたグループを
指定しないと、taiyakisunはそのグループから外れてしまいます。


要は、taiyakisunが今まで所属していたグループは全部指定しろと
いうことです。例えばtaiyakisunがグループtaiyakisun,beer,pianoという
グループに所属していて、今回subversionを加えるなら以下のように
指定するのです。

groupadd subversion
usermod -G taiyakisun,beer,piano,subversion taiyakisun


権限設定をします。

chgrp -R subversion /home/svn-repos
chmod -R 775 /home/svn-repos
chmod g+s /home/svn-repos/db


で、ここで自分も良くわからなかったのですが
svn+ssh、これはこれでデータをimportしないとだめ(?)なようです。


なので自分はまず以下を行いました。
パスワードが要求され、正しく入力するとチェックアウトされるはずです。

 cd C:\MyProject
 svn import -m "initial import" . svn+ssh://taiyakisun@TaiyakiServer/home/svn-repos/trunk


インポートが終わったらチェックアウトしてみましょう。

cd c:\work
svn co svn+ssh://taiyakisun@TaiyakiServer/home/svn-repos/trunk


もちろんSSHのポート(デフォルト22)について
ファイアウォールなどを空けることも忘れないでください。


なお、SSHは設定ミスなどで動かないことが多く、
出力されるメッセージが少ないため原因の特定に
少々骨が折れるそうです。


しかしその代わりにSSHによる強力なセキュリティを
確保することができ、VPNなどが使えないが一般公衆回線網を
介してデータのやりとりがしたいときなどとても便利です。
また、開放するポートも22番だけで済むようになります。


次回はSSH秘密鍵を生成して接続する方法についてやりたいと思います。
自分がまだそこまで行ってないので、いつになるか微妙ですが^^;