前回の続き
こんにちは、前回の記事GitHubでSSH認証を実装すると関係していて、少し発展的な内容になります。なので、前回のSSH認証の記事を読んでいただいた上でこの記事を読んでいただいたら理解が進むと思います!
今回の困ったこと
会社の研修でGitHubアカウントの作成を求められて、既に個人用のアカウントを持っていましたが、色々と余計なコードもあったので、複数アカウントを持つことにしました。会社用と個人用のGitHubアカウントを使い分けたい方は結構いると思います。
アカウント認証の手順が多くて覚えきれないと思いましたので、未来の自分のためにも個人的備忘録としてこの記事を作成したいと思いました。
新しいGitHubアカウント用の秘密鍵・公開鍵の作成
前回の記事と同様に新アカウントでもSSH認証を導入したいので、秘密鍵・公開鍵のペアを作成しました。
# .sshディレクトリに移動
$ cd ~/.ssh
# 秘密鍵・公開鍵のペアを生成
$ ssh-keygen -t rsa
鍵の名前、パスフレーズの設定など3つの質問が聞かれますが、ここをスルーしてしまうと(3回Enterキー押してしまうと)既に使っているid_rsaとid_rsa.pubの情報を上書きしてしまいます。
既存のGitHubアカウントでSSH認証が完了している場合、id_rsa.companyと会社用に使うと分かりやすいように別名で鍵の名前を決めましょう。
私はこのように会社用の鍵をid_rsa.companyと名づけました。
次に作成した公開鍵id_rsa.company.pubをGitHubアカウントに紐付けないといけません。その手順は前回の記事を見てください!
configファイルにサブアカウントの情報を追記する
下記コマンドでサブアカ(会社用)の情報を追記します。
$ vim ~/.ssh/config
ついでにvimの操作を説明すると、I (Insert)を押下してキーボード入力が可能になります。入力が終わったら、escキーを押下して「:wq」で上書き保存が完了します。
# メインアカウント
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
# サブアカウント
Host github.com-for-company
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa.company
TCPKeepAlive yes
IdentitiesOnly yes
Hostには、任意のホスト名を設定します。IdentityFileには、アカウントごとの秘密鍵の場所を記述します。
GitHubとの接続確認
# メインアカウントとの接続確認
$ ssh -T github
# サブアカウントとの接続確認
$ ssh -T github.com-for-company
Hi [アカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.
と表示されたら成功です。
アカウントの切り替え
ここで盲点だったのがターミナル上でのアカウント切り替えは別だということです。上のssh接続が上手くいかなかった場合、現在のアカウント情報の確認をしてみましょう。
# ユーザー名の確認
$ git config user.name
# 登録メールの確認
$ git config user.email
ここでユーザー名・登録メールはメインアカウントの物なのにssh接続はサブアカウントに向けたものと入れ違いが発生すると上手くいきません。このアカウントの切り替えとssh接続の流れはセットで覚えましょう。
$ git config --global user.name "[GitHubアカウント名]"
$ git config --global user.email "[GitHubのメールアドレス]"
切り替えの度にこれを実行するのは面倒なので、shellコマンドを作りましょう。
~/.zhrcファイルに関数を追記します。
$ vim ~/.zshrc
function gitmain() {
git config --global user.name "[メインのGitHubアカウント名]"
git config --global user.email "[メインのGitHubのメールアドレス]"
}
function gitsub() {
git config --global user.name "[サブのGitHubアカウント名]"
git config --global user.email "[サブのGitHubのメールアドレス]"
}
これでgitmainやgitsubと実行するだけで、アカウントを切り替えられるようになります。
git configに登録されている情報を確認したい時は下のコマンドを使用します。
$ git config -l
リモートと接続する時の注意点
複数アカウントを持ったことで、githubリポジトリとの連携でメインアカウント・サブアカウントのどのリポジトリかちゃんと把握する必要があります。
$ git remote -v
メインアカウントの場合は
origin git@github:<アカウント名>/<リポジトリ名>.git
サブアカウントの場合は
origin git@github.com-for-company:<サブアカウント名>/<リポジトリ名>.git
と表示されます。git@以降でどのアカウント対象のリポジトリか確認しましょう。
メインアカウントとサブアカウントのリモート接続の方法は下のように
# メインアカウントのリモートと接続
$ git remote add origin git@github:<アカウント名>/<リポジトリ名>.git
# サブアカウントのリモートと接続
$ git remote add origin git@github.com-for-company:<サブアカウント名>/<リポジトリ名>.git
久しぶりにGitHubを使うとここら辺のことすっぽり抜け落ちてしまいそうですよね...
参考資料
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
gitでPlease make sure you have the correct access rights and the repository exists. が出た時の対処法
複数のGitHubアカウントを使い分けたい時の設定方法とTips