Featured image of post 複数のGitHubアカウントをsshで使い分ける方法【.ssh/config】

複数のGitHubアカウントをsshで使い分ける方法【.ssh/config】

仕事用とプライベート用など複数のGitHubアカウントをsshで使い分ける方法。.ssh/configにアカウントごとのHost設定を書き、ssh -Tで接続ユーザーを確認、git configの削除とHost名を指定したクローン方法まで。誤コミット防止に♪

1194文字

仕事用とプライベート用を切り替えたい

誤コミットを防ぐのが目的

皆さんはGithubを使っているでしょうか?

筆者ももちろん利用しているのですが、仕事用の有料アカウントプライベート勉強用の無料アカウントの二つを持っているのですが、間違えてコミットなどをしたくないのでうまく使い分ける方法を探していたのですが、先日良さげな方法を見つけたので今回はそのやり方をご紹介しようと思います♪

規約的に複数アカウントは問題無し

その前に、Githubのアカウントを一人が複数持つ事が規約違反という記事をよく目にしますが、正しくは無料アカウントを複数持つ事が禁止されています。

無料の「アカウント」を複数持つことはできません。 GitHub利用規約 - GitHub Docs

筆者の場合は、仕事用は有料、プライベート勉強用は無料なので特に利用規約に違反していないと思っております!笑

手順

sshのconfigの設定

まず、今回は以下の設定を.ssh/configに記述してみます。

.ssh/config
Host github-work
  HostName github.com
  IdentityFile ~/.ssh/github-work
  user git

Host github-private
  HostName github.com
  IdentityFile ~/.ssh/github-private
  user git

また、それぞれのアカウントでGithubへの公開鍵登録及び疎通確認はしている事とします。

確認

では、それぞれの認証情報を使ってssh -T {名称}コマンドでGithubに接続が出来るか確認してみましょう。

コマンド
ssh -T github-work
Hi github-work! You've successfully authenticated, but GitHub does not provide shell access.

ssh -T github-private
Hi github-private! You've successfully authenticated, but GitHub does not provide shell access.

正常に接続時のユーザーが区別出来ていますね♪

git configの削除

次に作業をする前にGitのグローバル設定を確認してみましょう。

git config --global --listを実行して現在の設定を確認してみます。

git config --global --list
user.name=github-work
user.email=XXX@gmail.com

上記のようにuser周りの設定がグローバル設定されている場合、未指定の場合にデフォルトでこのユーザーが利用されてしまうのでgit config --global --unset {キー名}で削除しておきましょう。

クローン方法

例えば、github-workアカウントアクセス可能で、github-privateアカウントアクセス出来ないリポジトリがあった場合に、それぞれsshでクローンしようとしてみましょう。

[adsense-responsive]

コマンドはgit clone git@{config名}:{Githubアカウント名}/{リポジトリ名}.gitとなります。

クローン
git clone git@github-work/YYY.git
Cloning into 'YYY'...
remote: Enumerating objects: 585, done.
remote: Total 585 (delta 0), reused 0 (delta 0), pack-reused 585
Receiving objects: 100% (585/585), 286.63 KiB | 406.00 KiB/s, done.
Resolving deltas: 100% (268/268), done.

git clone git@github-private:XXX/YYY.git
Cloning into 'YYY'...
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

このようにそれぞれ正しく指定した認証情報が使われているので、リポジトリへのアクセス権限も問題ないですね♪

この状態でクローンしたディレクトリに移動し以下のコマンドをすると、正常にremote URLに使用したユーザー情報がセットされているのが確認出来ます。

git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
remote.origin.url=git@github-work:XXX/YYY.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

終わりに

以上のように、簡単にGithubへの接続情報を切り替える事が可能になりました♪

複数アカウントを使い分けてる方は少なくないと思うので、気になった方はぜひ試してみてはいかがでしょうか♪