svn+ssh
やる度に忘れている気がするので,メモ.
通常,リモートホストにある svn リポジトリにアクセスするには,svn+ssh を使えば良い.
例えば,
svn co svn+ssh://user@host/path
ssh のポート番号を変更する
一番需要があるのがポート番号を変更するというもの.検索してすぐに出てくるのはこのパターン.
${HOME}/.subversion/config
中の
[tunnels]
セクションに
myssh = ssh -p 22222
などと書いておき,svn コマンド実行時に
svn co svn+myssh://user@host/path
とすれば良い.
ssh の秘密鍵を変更する
ポート番号変更と同様.
${HOME}/.subversion/config
に
myssh = ssh -i /path/id_dsa
などと書けば良い.パスを記述するときには変数を使わずフルパスで書く必要があるようだ? (ホームを表す ~ も使えなかった)
svnserve を変更する
たぶんあまり需要はないのだけれど,私にはこれが重要だったりする.
普段自分でインストールした svn を使っているけど,サーバにアクセスしたときにはサーバデフォルトの svn が使われて困る,という場合.
具体的には,両者の svn のバージョンが離れていると,
svn: Expected version '3' of repository; found version '5'
などと言われてリポジトリにアクセスできない場合がある.
このような場合には,サーバにアクセスした時に普段使っている svn に対応した svnserve が起動するようにすれば良い.
ログイン時のコマンドを制限する
authorized_keys
中には,
ssh-rsa ...
という行があるはずだが,これを
command="/path/svnserve -t" ssh-rsa ...
と書き直すと,ログイン時に,指定した svnserve が実行されるようになる.
全く余談だが,
command="/path/svnserve -t -r /repospath" ssh-rsa ...
などとしてリポジトリのルートを設定しておくこともできるので,
リポジトリのフルパスを入力するのが面倒くさい,という場合にも使える.
セキュリティ的には,
command="..." no-pty,no-port-forwarding,... ssh-rsa ...
のように色々制限するためのオプションを付けるべきであろう.