GitLab や GitHub で複数のアカウントを使いたい。そんなときはありませんか?
Git リポジトリのホスティングサービスを使っていると、「仕事と個人」や「複数の仕事」など、複数のアカウントを切り替えて使うケースもあるかと思います。
別のサービスであれば ssh公開鍵を使いまわすこともできますが、同一サービス内では同じ ssh 公開鍵を別のアカウントで登録することはできません。
そのため、一般には Git クライアントで ssh公開鍵を切り替えて運用することになるのですが、これにはちょっとしたテクニックが必要です。
本ブログの運営でも GitLab を使っていて、まさにそのようなケースに嵌ったので、実際にどうしたか、どうすべきなのかをご紹介します。
この記事は Git Bash (黒い画面)での操作を前提にしています。
別のツールでの解説がほしい場合は、@search_bankまでお知らせください。
このページの目次
ユーザーアカウントに応じた ssh を設定する方法は、次の5ステップです。
以降では説明の都合から、ふだん使うアカウントを「メインアカウント」、それ以外のアカウントを「サブアカウント」とします。
最初にアカウントごとの ssh 鍵を作成します。
すでにGitLab/GitHubアカウントを持っている場合、.ssh ディレクトリで次のような ssh鍵が確認できます。
$ ls ~/.ssh/
id_rsa id_rsa.pub
「id_rsa」は、RSA暗号のssh鍵のデフォルト名です。「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵です。
メインアカウントには、「id_rsa.pub」の内容を登録しているはずです。
今回はサブアカウント用に、ssh-keygen コマンドで新しいssh鍵ペアを作成します。
ssh-keygen コマンドを実行すると、暗号方式など選ぶことができますが今回は省略します。
次の例では、 id_rsa_sub という鍵を作成しました。
$ ssh-keygen
...
$ ls ~/.ssh/
id_rsa id_rsa.pub id_rsa_sub id_rsa_sub.pub
ssh鍵を作成したら、サブアカウントに公開鍵(*.pub)を登録します。
ssh公開鍵はテキストファイルなので、 cat コマンドで表示できます。
$ cat ./.ssh/id_rsa_sub.pub
ssh公開鍵の登録は、各サービスのアカウント設定画面から登録できます。
.ssh ディレクトリの config ファイルにサブアカウント用のssh鍵の設定を記載します。
config ファイルがない場合は作成します。ファイル名は config だけで、拡張子は不要です。
Host gitlab.sub # サブアカウント
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa_sub # サブアカウント用の鍵
TCPKeepAlive yes
IdentitiesOnly yes
サブアカウントを使うリポジトリで、接続アカウントの設定をします。
まずはリポジトリのアカウントをサブアカウントにするため、 git config でユーザー情報を設定します。
$ git config --local user.name {ユーザー名}
$ git config --local user.email {メールアドレス}
続けて、リモート接続の設定をサブアカウントの内容に変更します。
git remote コマンドで表示される ホスト名(下線部)を、config ファイルに設定したサブアカウントの設定名で登録し直します。
$ git remote -v
origin git@gitlab.com:username/repository_name.git (fetch)
origin git@gitlab.com:username/repository_name.git (push)
$ git remote set-url origin git@github.sub:username/repository_name.git
以上で、サブアカウントの設定は完了です。
リポジトリで一度設定することで、それ以降はメインアカウントと同様に使うことができます。
ただ、リポジトリごとに設定する手間を考えると、VMなどで開発環境を切り分ける方が、使い勝手は良いかもしれませんね。
ちなみに、GitHubでは個人での無料アカウントの複数保持は規約で禁止されていますので、その点はご注意ください(企業からアカウントを発行してもらう場合、有償の組織アカウントであれば問題ありません)。
1 人の個人または 1 つの法人が複数の無料「アカウント」を保持することはできません (コンピュータアカウントも制御することを選択した場合、それは問題ありませんが、それはコンピュータの実行にのみ使用できます)。
引用元:GitHub利用規約「B. アカウント利用規約」「3. アカウントの要件」