ちょんまげで免許更新しました! その後の様子はTwitterfacebookInstagramで随時更新中。 ε≡≡|ト<ε:)ヽゴザルー
Categories情報処理

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

Date 2019/06/07 20:00  Modified date 2020/03/28 Author Yutaka  Tags Mac やり方

 コマンドライン苦手系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
# ----------------------------
Back to Top