SourceTreeでGitHubアカウントを複数使用した際のエラー解消方法

サイト運用

SourceTreeでGitHubアカウントを複数設定した場合、SSH接続エラーになることがあります。
SourceTreeとGitHubの組み合わせでのSSH接続エラーの原因はいくつかあるので、今回解消できるケースの前提を共有した上で、原因と解消方法を記載したいと思います。

状況の前提

  • GitHubアカウントを一つのみ設定した場合には、SSH接続エラーは出ない。
  • PCを再起動して、最初に接続したアカウントはSSHエラーがでない。

SourceTreeで設定しているGituHubアカウントが一つのみでSSHエラーが出ている場合は、今回とは別の原因も絡んでいる可能性があります。

PCを再起動して、最初に接続したGitHubアカウントではエラーが出ない理由は、次の項目「SSH接続エラー原因」で説明しますので、ご参考ください。

エラー内容

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

接続先の公開鍵の権限が拒否されて、リモートリポジトリが読み取りできません。
という内容のエラーが表示されます。

SSH接続エラー原因

複数のGitHubアカウントを設定した場合にSSH接続エラーになる原因は、「最初に接続したアカウントのSSHキーを、次に接続するアカウントも使用するようになってしまっている。」ことにあります。
GitHubのアカウントに紐づいたSSHキーではないためエラーになっている状態です。

SSH接続エラー解消方法

2つの対応をする必要があります。
ひとつは、configファイルの設定追加
もう一つは、リモート接続のパスの書き換えです。

configファイルに秘密鍵の指定を追記する

「/Users/ユーザー名/.ssh」にあるconfigファイルの接続したいアカウントに、「IdentitiesOnly yes」という記述を追加します。
GitHubのホストごとに、指定された秘密鍵のみを使用する設定を追加した状態です。

# --- Sourcetree Generated ---

Host mmapple-GitHub
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/mmapple-GitHub
UseKeychain yes
AddKeysToAgent yes
IdentitiesOnly yes  // この記述を追加します

# ----------------------------

リモートのSSHパスを修正する

GitHubのリポジトリ画面に表示されるSSHのパスは、以下のような形式になっています。

git@github.com:[GitHubユーザ名]/[リポジトリ名].git

具体例)
git@github.com:mmapple/full_screnn_slide01.git

このままの記述でSSH接続すると、エラーになる場合があります。
理由は、ローカルPCの.sshのconfig設定の情報とは異なるためです。
今回のconfigファイルの設定内容では、Hostは「mmapple-GitHub」になっているため、接続指定が異なっている状態です。

GitHubのデフォルト設定から、configで個別の変更を加えているため、リモート接続のパスもconfigに合わせて書き換えます。

リモートパスの書き換え

git@github.com

mmapple-GitHub (.ssh/configに記載のHost名)

具体例)
git@github.com:mmapple/full_screnn_slide01.git

mmapple-GitHub:mmapple/full_screnn_slide01.git

アカウント分の.ssh/configと各リポジトリのリモート接続パスの書き換えで、エラーが解消されると思います。

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