subclipse で svn+ssh が使いたいのだけれど、ssh-agent が効く command インターフェース(裏でsvnを起動しまくる)は 全然まともに動かないし、かといって javahlにすると、今度はレポジトリブラウザでツリーを展開したりする度にパスワードを聞かれる。 こんなん使えるか! shellで入れるパスワードを保存するのは嫌なので、何とかしてみたメモ。
取り合えず最初に保存してしまったパスワードを消す。 $ECLIPSE_HOME/configuration/org.eclipse.core.runtime/.keyring に保管されているみたいなので、このファイルを消せば OK.
ここから本題。まず、専用のパスワード無しの鍵を作る。
sugi@tempest:~/.ssh% ssh-keygen -t dsa -f id_svn_nopass -C "NoPssword key for SVN" Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_svn_nopass. Your public key has been saved in id_svn_nopass.pub. The key fingerprint is: d3:e1:c0:b9:e7:4d:66:ed:6e:91:ad:df:30:49:2d:46 NoPssword key for SVN
鍵が出来たらこれを svn レポジトリのあるサーバの ~/authorized_keys(2) に足すのだけれど、 そのときに起動するコマンドを強制するオプションを最初に付ける。 こんな感じ。このオプションの後ろに(スペース開けて)キーを書けばいい。
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/bin/svnserve -t"
キーが出来たらこれでレポジトリにアクセスできるかどうかテストする。 ~/.subversion/config に以下のように使うキーを設定しておいて、
[tunnels] ssh = ssh -i /home/sugi/.ssh/id_svn_nopass
取り合えず svn ls でも実行してみる(agent 使わないようにしてね)。
SSH_AUTH_SOCK= svn ls svn+ssh://your.svn.server/path/to/repos
これでパスワードを聞かれずにすぐファイル名が帰ってくれば OK. 確認できたら ~/.subversion/config を元に戻して、 $ECLIPSE_HOME/configuration/config.ini に以下のようなのを足しておく。
javasvn.ssh2.key=/home/sugi/.ssh/id_svn_nopass javasvn.ssh2.passphrase=
あとは、eclipse を起動して SVN Repository Explorer から New > Location でレポジトリのパスを追加すればいい。 ただし,パスワードは空でいいが、ユーザ名だけ入れておくこと。 さもないと何故かパスワードを聞きにきてしまう。