困ったこと
SourceTreeを使ってBitbucketのリモートレポジトリにソースをコミットできない(コンソールでgit pushは可能)
前提条件
- OSはmacOS
- SSH秘密鍵を~/.ssh/id_rsaとして生成済み
- Bitbucketの自分のアカウントのSSH鍵に~/.ssh/id_rsa.pubの内容を設置済み
- Bitbucketにレポジトリは作成済み
- SourceTreeのリモートレポジトリはアプリの次の手順で設定済み(メニュー>リポジトリ>リポジトリ設定>リモート>追加>URLの右の地球儀ボタンを押してBitbucketを指定)
現象
SourceTreeのプッシュを実行すると下記のエラーメッセージが表示されプッシュに失敗する。
git@bitbucket.org: Permission denied (publickey).
原因
SSH秘密鍵~/.ssh/id_rsaにパスフレーズが設定されていると失敗する。
確かにコンソール上でプッシュした時には下記のようにパスフレーズを聞かれていた。
$ git push -u origin master
Enter passphrase for key '/Users/xxx/.ssh/id_rsa':
次のようにパスフレーズを削除したらプッシュに成功した。
$ openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa2
$ mv ~/.ssh/id_rsa2 ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa
mikkameさんからコメント頂きまして、下記の様にssh-agentに秘密鍵を登録することでパスフレーズ付きの秘密鍵でもプッシュに成功しました。
$ ssh-add -K
調べたところmacOS標準のsshクライアントはデフォルトでkeychainの情報を参照できるらしく、ssh-addを使って秘密鍵をkeychainに登録しておけばパスフレーズ付きでもsshクライアントが利用できる様になるらしい。
しかし、失敗時のエラーメッセージが不親切すぎるなぁ