【備忘録】GitHub複数アカウントでSSH接続にハマったときの対処法
プロジェクトに新規参画された方の環境構築のフォローをする機会があり、
その際に「複数のGitHubアカウントを使っていることでgit clone
ができない」という問題に直面しました。
本記事では、複数アカウントをSSHで使い分けるための設定方法と対処法を備忘録としてまとめます。
※この記事に出てくるサンプルコードはこちらの記事からの引用です。
git cloneができなかった原因
複数のgitのアカウントを併用していて、~/.ssh/config
に適切に設定を書き込めていなかったためです。
※意図したアカウント(リポジトリに対する権限を付与されたアカウント)とは異なるアカウントでssh接続している状態で、権限の問題でcloneできなかったという状態です。
私は複数のアカウントを1台のPCで併用したことがなかったので、
複数のgitのアカウントを併用していることが原因であるということに気づくのが遅れました。
~/.ssh/config
の書き方
複数のアカウントでgitを用いる際の以下のようになります。
ファイルが無ければ新規作成し、あれば記載内容を修正してください。
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.name
とuser.email
を設定すれば、commitなども正しいアカウントで管理できる。
複数アカウントを運用する際の初期のハマりポイントを回避する助けになれば嬉しいです!
Discussion