Top
Photo Drawings Software Writing Reading Memo Study Profile Bookmark 

学外からのCVSアクセス

CVSリポジトリがpllab.jaist.ac.jpの/proj/cvsrepositoryにあると する。このリポジトリに、学外からアクセスしたい。

ネットワーク環境

前提としているネットワーク環境はつぎのとおり。

   localhost                fep.jaist.ac.jp             pllab.jaist.ac.jp
   +--------+             +----------------+             +-----------------+
   |        +----(WAN)---(22)              +---(Intra)---+                 |
   +--------+             +----------------+             +-----------------+
こちらで説明している。

アクセスメソッド

cvsがリモートサーバにアクセスする手段には、主なものとして次の 二つが用意されている。

pserver
cvs内部に実装されている独自のプロトコルを使用する。inet.d経 由で起動されるため、サーバ側で/etc/inetd.conの設定が必要。こ れにはサーバのroot権限が必要。
ext
外部コマンドを使ってサーバに接続する。標準ではrshを使用する が、CVS_RSHを設定することでsshを使用させること ができる。
今回はサーバのroot権限を持っていないことが前提なので pserverは使用できず、extを使う。

CVSが使用するコマンドの設定

cvsがローカルマシン上で起動するコマンド (CVS_RSH)と、リモートマシン(CVSリポジトリがあるマ シン)上で起動するコマンド(CVS_SERVER)を設定する。 JAIST標準のcvsは古く、後述の問題が発生するため、 替わりに/pkg/all/bin/cvsを指定する。

$ export CVS_RSH=ssh
$ export CVS_SERVER=/pkg/all/bin/cvs
	

ポートフォワーディング

すでに述べたように、学外からJAIST内のサーバ(pllab)に 直接ssh接続することはできない。 そこで、fepを経由するport forwardingを利用する。 sshはポート22を使用する。したがって、port-forwardingによって つぎのような接続状況が得られればよい。

             localhost               fep.jaist.ac.jp        pllab.jaist.ac.jp
             +--------+             +---------------+      +-----------------+
cvs->ssh->(22)-(ssh)-(p1)==========(22)---(sshd)--(p2)---(22)->sshd->cvs     |
             +--------+             +---------------+      +-----------------+

しかし、この方法には、二点問題がある。 まず、ポート22はsshサーバ(sshd)が通常使うポートであり、 sshサーバがポート22を使用している場合、この方法は使えない。 また、ポート22が使用されていない(bindされていない)場合であっても、 ポート22は特権ポートなので、使用(bind)するにはroot権限が必要である。

したがって、cvsコマンドから起動されるsshコマンドに、 22以外のポートを使わせるようにしなければならない。 しかし、sshはcvsにより間接的に起動されるが、いまのところ、 cvsに、sshを起動する際にポート番号を指定させる方法は いまのところ無いようである。 (cvsのソースにパッチを当てて再コンパイルする方法はあった。) 最近のsshでは(?)、.ssh/configにつぎのように設定することで、 ポート番号を指定できる。

Host cvs.pllab
        HostName localhost
        Port 2222
        
接続先にcvs.pllabを指定すると、この設定が適用される。

そして、つぎのようにport-forwardingを実行しておく。

# ssh -L 2222:pllab.jaist.ac.jp:22 fep.jaist.ac.jp -l kiyoshiy
	
cvsを実行すると、接続状況はつぎのようになる。
               localhost               fep.jaist.ac.jp        pllab.jaist.ac.jp
             +----------+             +---------------+      +-----------------+
cvs->ssh->(2222)-(ssh)-(p1)==========(22)---(sshd)--(p2)---(22)->sshd->cvs     |
             +----------+             +---------------+      +-----------------+

使用するcvsの指定

JAIST標準のcvsは少しバージョンが古いため、 ssh経由での接続がうまくいかない。 たとえばcheckoutを試みるとつぎのエラーメッセージが表示されて失敗する。

$ cvs -d:ext:kiyoshiy@cvs.pllab:/proj/cvsrepository checkout public_html
Enter passphrase for RSA key '/home/yamato/.ssh/identity':
CVS commands are:
        add          Add a new file/directory to the repository
        admin        Administration front end for rcs
        annotate     Show last revision where each line was modified
        checkout     Checkout sources for editing
        commit       Check files into the repository
        diff         Show differences between revisions
        edit         Get ready to edit a watched file
        editors      See who is editing a watched file
        export       Export sources from CVS, similar to checkout
        history      Show repository access history
        import       Import sources into CVS, using vendor branches
        init         Create a CVS repository if it doesn't exist
        log          Print out history information for files
        rdiff        Create 'patch' format diffs between releases
        release      Indicate that a Module is no longer in use
        remove       Remove an entry from the repository
        rtag         Add a symbolic tag to a module
        status       Display status information on checked out files
        tag          Add a symbolic tag to checked out version of files
        unedit       Undo an edit command
        update       Bring work tree in sync with repository
        watch        Set watches
        watchers     See who is watching a file
(Specify the --help option for a list of other help options)
cvs [checkout aborted]: end of file from server (consult above messages if any)
かわりに、/pkg/all/bin/cvsを使用する。 このためには、ローカルホスト側で 環境変数CVS_SERVERを次のように設定する。
CVS_SERVER=/pkg/all/bin/cvs; export CVS_SERVER

CVSリポジトリからのファイル取り出し

CVSROOTとして、次のように、アクセスメソッド ext、サーバ上でのアカウントkiyoshiy、 ssh/configに追加した接続先ホスト名cvs.pllab、 サーバ上でのリポジトリのパスを指定する。

$ export CVSROOT=:ext:kiyoshiy@cvs.pllab:/proj/cvsrepository
	
以下のように、リモートサーバ上のリポジトリからモジュールを 取り出すことができる。
$ cvs checkout Project1
	

あるいは以下のようにおこなう。

$ cvs -d :ext:kiyoshiy@cvs.pllab:/proj/cvsrepository checkout Project1
	

参考