🙌

【備忘録】GitHub複数アカウントでSSH接続にハマったときの対処法

に公開

プロジェクトに新規参画された方の環境構築のフォローをする機会があり、
その際に「複数のGitHubアカウントを使っていることでgit cloneができない」という問題に直面しました。

本記事では、複数アカウントをSSHで使い分けるための設定方法と対処法を備忘録としてまとめます。

※この記事に出てくるサンプルコードはこちらの記事からの引用です。

git cloneができなかった原因

複数のgitのアカウントを併用していて、~/.ssh/configに適切に設定を書き込めていなかったためです。
※意図したアカウント(リポジトリに対する権限を付与されたアカウント)とは異なるアカウントでssh接続している状態で、権限の問題でcloneできなかったという状態です。

私は複数のアカウントを1台のPCで併用したことがなかったので、
複数のgitのアカウントを併用していることが原因であるということに気づくのが遅れました。

複数のアカウントでgitを用いる際の~/.ssh/configの書き方

以下のようになります。
ファイルが無ければ新規作成し、あれば記載内容を修正してください。

Host github.com.main # メインアカウント
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_main  # メインアカウント用の鍵
  TCPKeepAlive yes
  IdentitiesOnly yes

Host github.com.sub # サブアカウント
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_sub  # サブアカウント用の鍵
  TCPKeepAlive yes
  IdentitiesOnly yes

補足

実際にファイルを作る際、#以下のコメントは記載しないでください。
また、Hostに記載する内容は、識別しやすいように変えていただいて問題ないです。
github.com.{リポジトリ名}などがわかりやすいかと思います。

ssh接続できるかテスト

そして、ssh接続できるかテストします。

ssh -T git@github.com.main # メインアカウントでのssh接続のテスト
ssh -T git@github.com.sub # サブアカウントでのssh接続のテスト

コマンドを打つと、Hi以下に、表示されるgithubのアカウント名が、
意図したアカウントのものであるかどうかを確かめてください。

Hi {yourname}! You've successfully authenticated, but GitHub does not provide shell access.

git cloneの方法

先ほど~/.ssh/configに設定したHost@以下に指定してgit cloneします。

※通常のSSH URL(git@github.com:username/repo.git)のgithub.comの部分を、
~/.ssh/configで設定したHost(例:github.com.main)に置き換える必要があります。

ここの指定を適切に行わないと、この記事の冒頭で書いたような、意図したアカウントでssh接続できない事態に陥ります。

# メインアカウントの場合
git clone git@github.com.main:username/repository-name.git

# サブアカウントの場合
git clone git@github.com.sub:username/repository-name.git

使用するアカウントの設定

複数のアカウントを使い分ける場合、複数のプロジェクトに同時に参画していて、
リポジトリごとに使用するアカウントを変えたいという場合がほとんどだと思われます。

なので、リポジトリ毎に以下を実行しておけば問題ないと思います。

cd {リポジトリ名}
git config --local user.name {当該リポジトリで使うgitのユーザー名}
git config --local user.email {当該リポジトリで使うgitのメールアドレス}

まとめ

  • 複数アカウントを使う場合は~/.ssh/configの設定が必須。
  • Hostを切り替えてgit cloneすれば、意図したアカウントで操作可能。
  • 各リポジトリでuser.nameuser.emailを設定すれば、commitなども正しいアカウントで管理できる。

複数アカウントを運用する際の初期のハマりポイントを回避する助けになれば嬉しいです!

Discussion