eclipseのsubversiveでsvn+sshでsubversionにアクセスするメモ
サーバ側の設定
仮にsvnuserというユーザがいたとしたら、svnuserの ~/.ssh/authorized_keys に
command="svnserve -t --tunnel-user=xfan -r /path/to/repos",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1y(中略)8sc0bRAnHeEi78= xfan
公開鍵認証によるSSHログインで、ログイン時にsvnserveを実行するようにコマンドを設定してある。さらに、--tunnel-userを指定することで、この公開鍵をつかって認証された場合はxfan名でSubversionを利用することになる。
クライアント側の設定
環境変数SVN_SSHの設定
plink.exeをローカルに保存して、そのファイルの場所を環境変数SVN_SSHに設定する。注意点は
- パス区切りは '\' はNG。'\\' か '/' をつかう
- 秘密鍵ファイルまたはagentの利用(後述)をオプションで指定する
具体的には以下のような感じ。秘密鍵を指定するかわりにagentの利用をオプションで宣言している。ユーザ名などはリポジトリURLの中で指定されるので不要。
C:/ProgramFiles/putty/plink.exe -agent
pagentを立ち上げて秘密鍵登録
pagentは、常駐型のプログラムで、事前に秘密鍵とそのパスフレーズを登録しておくことができる。登録しておけば、putty.exeやplink.exeがサーバに接続するときに、pagentに登録されている秘密鍵とパスフレーズを自動的に利用してくれる(plinkでは -agent オプション指定が必要)。
なので、必須ではないけれど、これを利用すればパスフレーズの入力を何度も行う必要がなくなるということで、SSH経由でSubversionを使う際にないと結構つらい。
リポジトリエクスプローラーで新規ロケーション作成
URL は以下のような感じ。
svn+ssh://svnuser@svn.example.com/
ユーザはあくまでSSHでログインする際のものなので、xfanではなくsvnuser。Subversionに記録されるユーザ名は、認証につかう鍵と、サーバ側のauthorized_keysでsvnserveのオプションとして指定したtunnel-userで決まる。
svnserveのオプションではさらにリポジトリパスも指定してあるので、これをURL中で指定する必要もない。
試行錯誤する場合、環境変数の変更後にEclipseを再起動する必要はとくになさそうだった。
2011/02/27追記
Aptana Studio, build: 1.2.1.020234 では SVN_SSH の変更後に再起動しないと変更が反映されなかった。バージョンによるのかも。