読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

SubversionのSSHで鍵を指定する

% svn co svn+ssh://hogehoge

とかで、sshを使ってSubversionにアクセスできることはしってたんだけど、いつもDAV経由にしちゃうのであまり使ったことがなかった。
で、今回は、ssh経由でsvnにアクセスしなきゃならなかったんだけど、DSA(別にRSAでもいいんだけど)の公開鍵を使って接続する方法がわからなかったから調べてみた。
あ、前提として、接続先サーバには鍵認証を使ってsshできるようになっていること。


結論から言うと、どうやら scheme を自分で定義することになるようだ。

$HOME/.subversion/configを見ると、

### Section for configuring tunnel agents.
[tunnels]
### Configure svn protocol tunnel schemes here.  By default, only
### the 'ssh' scheme is defined.  You can define other schemes to
### be used with 'svn+scheme://hostname/path' URLs.  A scheme
### definition is simply a command, optionally prefixed by an
### environment variable name which can override the command if it
### is defined.  The command (or environment variable) may contain
### arguments, using standard shell quoting for arguments with
### spaces.  The command will be invoked as:
###   <command> <hostname> svnserve -t
### (If the URL includes a username, then the hostname will be
### passed to the tunnel agent as <user>@<hostname>.)  If the
### built-in ssh scheme were not predefined, it could be defined
### as:
# ssh = $SVN_SSH ssh
(snip)

とか書いてある。

というわけで、こういう記述を足してみた。

sotarok = /usr/bin/ssh -i /home/sotarok/key_of_sotarok

普通のsshコマンドのときに鍵を指定するように、-iで鍵を指定。

そうすると、

% svn co svn+sotarok://sotarok@example.com/path/to/repo

のようなカンジでアクセスできる。
パスフレーズ無しの鍵を作っておいて、こうして独自の scheme を定義してあげれば、それ以降何も打たずに co ci ほげほげできる。

そのうえ、まるで自分の名前のプロトコルができたようでカッコイイ(

追記

コメントいただきましたので、追記。
普段から ssh の config 使ってる人は、こんな設定するまでもないっぽいです><

Host sotarok
  HostName example.com
  User sotarok
  IdentityFile /home/sotarok/key_of_sotarok

って設定してあったら、

% svn co svn+ssh://sotarok/path/to/repo

でいけました!


ちなみに、

ssh の config はいつも使ってますよ :) *1

*1:それをsvnで使えるとおもわなかっただけでw あれ?svnのマニュアルに書いてありましたっけ・・・そりゃマニュアル(ry ってかんじですね :p