※弊社記事はたぶんにPRが含まれますので
話半分で受け取ってください。

Mac版のSourceTreeでプル/プッシュするときに「Permission denied」と言われる場合の対処方法

 コマンドライン苦手系IT人間なので、GitHubはSourceTreeで使っています。
 ところが、いつ頃からかわからないのですが、たまにSourceTreeでGitHub(とかGitLabとか)にプル/プッシュしようとすると「Permission denied (publickey)」と言われるようになりました。公開鍵を設定し直すと出なくなるのですが、どうもめんどくさいし気持ちが悪いので対処方法を調べてみました。

原因

 調べたら、Macを再起動すると ssh agent に登録された鍵がまっさらになってしまうことが原因のようでした。なるほどエラーが出たり出なかったりするのはそういうことか……

対処方法

 以下のようにssh-addコマンドでGitHub用の秘密鍵を登録してあげればSourceTreeのエラーが出なくなります。

$ ssh-add ~/.ssh/(GitHub用の秘密鍵)

 GitLabも同じ。どうでもいいですが、GitLabはアカウントを追加するときにアカウントのパスワードじゃなくてアクセストークンを使う、ということを毎回忘れて「なんでアクセスできないんじゃぁ……」ってなる。

再起動しても消えないようにする

 ssh-addで登録しても再起動すると設定は消えてしまうので、再起動するたびにssh-addする必要があります。秘密鍵をキーチェインに登録して、キーチェインから自動的に読み込まれるように設定すればおk。

 まず、ssh-addコマンドで秘密鍵をキーチェインに登録します。-K オプションを入れるとキーチェインに追加されます。

$ ssh-add -K ~/.ssh/(GitHub用の秘密鍵)

 続いて .ssh/config に以下の内容を追加します。

Host *
  UseKeychain yes
  AddKeysToAgent yes

 これで再起動しても自動的に鍵が登録されるようになるハズ。

configの書き換え

 Sourcetree で鍵を設定すると ~/.ssh/config に以下のように設定が書き込まれます。(USER は自分のユーザ名です。)

# --- Sourcetree Generated ---
Host USER-GitHub
	HostName github.com
	User USER
	PreferredAuthentications publickey
	IdentityFile /Users/USER/.ssh/USER-GitHub
# ----------------------------

 このうち Host と HostName を書き換えて以下のようにします。

# --- Sourcetree Generated ---
Host github.com
	HostName github.com
	User USER
	PreferredAuthentications publickey
	IdentityFile /Users/USER/.ssh/USER-GitHub
# ----------------------------

 Gitlabの場合も同様に Host と HostName を書き換えます。

# --- Sourcetree Generated ---
Host gitlab.com
	HostName gitlab.com
	User USER
	PreferredAuthentications publickey
	IdentityFile /Users/USER/.ssh/USER-GitLab
# ----------------------------

関連する記事