概要
SourceTreeの環境構築中に変なところで躓いたので、忘れないように書いておこうと思います。
解決するまで時間がかかったのと、根本的な原因は未だに不明です。
環境
- Windows 7 Professional
- SourceTree Version 1.7.0.32509
問題
環境構築自体は途中まで問題なく出来ていました。
- SourceTreeのインストール
- PuTTY Key GeneratorでSSHキーの作成
- SSHエージェントを起動し、SSHプライベートキーの登録
- BitbucketにSSHパブリックキーを登録
- Bitbucketから「SourceTreeにクローン」ボタンを使用してクローン開始
- ……クローンできない!(というかそもそもGitリポジトリとして認識されていない?)
という具合にピンポイントでここだけ上手くいきませんでした。
いくら待ってみてもリポジトリの取得が終わらないのです。
以前、SourceTreeを入れていた別のPCでは問題なく動いていて、
何故か新規にSourceTreeを入れたPCではクローンできませんでした。
まあ、ここまではよくある現象だと思っていました。
たぶん、SSHキーがうまく認証できていないんだろうと。
ここから試行錯誤が始まります。
- SSHキーの設定を見直す
- SSHキーを作りなおす×2~3回
- PC再起動
- SourceTreeの再インストール
- ファイアウォールを無効にする
- URLをポート指定にしてみる
- 別のSourceTreeを入れていないPCで試す → こっちでも発生!
いろいろ試してみましたが、どれもこれもSSHの認証が通りません。
SSHは諦めてHTTPSにしようかなと思っていた時に、ある情報が気になります。
(HTTPSではリポジトリを認識してくれました。)
WindowsだとSSHを使用した時、レジストリに何か書き込まれるらしい。
調べてみると、どうやら以下の場所に書き込まれるようです。
HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys
上手くいくPCでは「rsa2@22:bitbucket.org」がありますが、
今回問題のあったPCではこれが書き込まれていません。
たぶん、こいつのせいです!
解決方法?
なんでレジストリに書き込まれないかは、SourceTreeのみぞ知るなので分かりません。
では、どうしたらここに書き込まれるのでしょうか?
調べてみると、以下のコマンドでなんとかなりそうです。
コマンドプロンプトで
> "C:\Program Files (x86)\Atlassian\SourceTree\tools\putty\plink.exe"
-ssh -C -i "privatekey.ppk" git@bitbucket.org
と実行して以下のように出ていれば大丈夫だと思います。
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) y
Using username "git".
Server refused to allocate pty
logged in as <ユーザー名>.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
レジストリを確認してみると、「rsa2@22:bitbucket.org」が書き込まれています!
そして、再度Bitbucketからクローン。今度は上手くいきました!
まとめ
WindowsでGitの環境構築をする時、毎回SSH(PuTTY)周りで引っかかるのですが、
まさか、Windowsのレジストリまで見に行くことになるとは思いませんでした。
原因は不明ですが、おそらくSourceTreeの特定のバージョンで
上手くいかない時があるのかもしれません。(今まではこんなことはなかったので)
ちなみに、私は個人的な好みでGit Extensionsを使ってます。