Eclipse から git へ ssh の公開鍵を使ってアクセスする方法

↑で、かなりハマってしまったので、メモ。


以下、MacOS10.6.8 + Eclipse3.6 の話。


gitosis は ssh の公開鍵認証でアクセスするので Eclipse からアクセスできるようにしようとしたのが始まり。
まず、Eclipse に Egit をインストールして git を使えるようにする。
次に、公開鍵の設定。
Preference→General→Network Connections→SSH2
で、鍵のあるフォルダと鍵のファイル名を指定。
Git Repository Exploring パースペクティブから gitosis で管理しているリポジトリをクローン。
と、ここで問題発生。


"auth fail" とエラーが出て、リポジトリにアクセス出来ない。

Host ホスト名
  HostName ホスト名
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa

と設定すればいいよというブログを見つけたのでやって見るが効果なし。

いろいろ試してみると以下のことがわかった。

  • gitosis に関係なく git のリポジトリ自体の問題っぽい
  • パスワードログインで試してみると、うまくいくので公開鍵の問題っぽい


最終的に以下のようなコメントを発見し、試してみるとうまくいった。

If you continue to have this problem, try setting the GIT_SSH environment variable to /usr/bin/ssh before you run eclipse (or wherever you have ssh installed). This fixed everything for me.

http://www.eclipse.org/forums/index.php/t/197428/
$ export GIT_SSH=/usr/bin/ssh
$ Eclipse.app/Contents/MacOS/eclipse


でも、毎回 ↑ のようにするのは面倒なので、環境変数を設定できないか調べてみたら、ビンゴなのがあった。

LSEnvironment
このキーは、アプリケーションの起動に先立ってあなたが定義したい、環境変数のリストを格納します。
環境変数の名前が辞書のキーであり、その値は対応する環境変数の値となります。キーと値は共に文字列とする必要があります。
これらの環境変数は、Launch Services を通じて起動されるアプリケーションに対してのみ設定されます。もしあなたが、コマンドラインから直接あなたの実行可能ファイルを実行した場合、これらの環境変数は設定されません。

http://potting.syuriken.jp/potting_conv/BPRuntimeConfig_J/chapter3.html#chapter3-2-29


これを、 Eclipse.app/Contents/Info.plist に設定。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/     DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>LSEnvironment</key>
   <dict>
         <key>GIT_SSH</key>
         <string>/usr/bin/ssh</string>
   </dict>
(略)

上のように追記して、起動。が、うまくいかない。
調べてみたら、Launch Services(アプリケーション起動用フレームワーク) が Info.plist の変更を自動で検知してくれないらしい。
なので、以下のコマンドで Info.plist の変更を教えてやる。

$ /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f Eclipse.app


で、なんとか Eclipse から gitosis の管理する git リポジトリに 公開鍵でアクセスできた。
めでたしめでたし。