Git push時にパスワードを毎回聞かれてしまう対策

macOSHigh Sierraにアップデートしたあと、git pushで毎回パスワードを聞かれる気がする。

こういった表示が毎回出ます。

Enter passphrase for key '/Users/<username>/.ssh/id_rsa':

High Sierraにしてから目に見えないところで色々変化があって、対応が面倒です。

以前(El Capitan)まで、git pushで、Bitbucketにプッシュしても、 パスワードは聞かれなかったような覚えがあるんですが、対策をしたいと思いました。

調査

  • git pushoriginに指定しているBitbucketにプッシュすると、毎回パスワードを聞かれる。
  • git push heroku masterHerokuにプッシュするときは聞かれない。

この2つで差はないかgit remote -vで調べると、プロトコルが違いました。

$ git remote -v
heroku  https://git.heroku.com/<repository>.git (fetch)
heroku  https://git.heroku.com/<repository>.git (push)
origin  ssh://git@bitbucket.org/<username>/<repository>.git (fetch)
origin  ssh://git@bitbucket.org/<username>/<repository>.git (push)

聞かれる時のメッセージ的にもこれだと思います。なのでoriginに対応するURLをhttpsのものに変更すればいいのではと思いました。 httpsだとcredential.helperによるパスワードのキャッシュの恩恵を得られるようです。

Homebrewgitを導入すると、自動でcredential.helperosxkeychainが指定されているようです。

対策

originの変更方法を調べるため、git remote --helpで探すと、git remote set-url <name> <new_url>がありました。

git remote set-url origin https://<username>@bitbucket.org/<username>/<repository>.git

を実行すると、originfetchpushの両方が書き換えられます。 プッシュしてみると、初回はosxkeychainからパスワードを聞かれますが、(SSHのではない) 常に許可しておけば、以降は聞かれなくなりました。キャッシュの有効期限が切れるまでは聞かれないと思います。

SSHのまま対策するとき

ssh-agentというものを使えばいいらしいです。詳しくは参考の2つ目を。El Capitanのときはこの方法をとった覚えがあります。

参考

タイトルとURLをコピーしました