何度やっても同じ

ただの日記

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 の変更後に再起動しないと変更が反映されなかった。バージョンによるのかも。