GitHub 複数アカウントを1台のPCでSSH接続で使い分ける方法

ローカル環境からコマンドでリモートリポジトリへプッシュする際、デフォルトで登録しているユーザーでなければプッシュ出来なかった経験はないでしょうか?

管理人は、過去に使用していたユーザーアカウントとは別のアカウントのリモートリポジトリへプッシュを試みたところ、下記のエラーが発生しました。

どうも複数アカウントを使用していると起こりがちなエラーの様子です。

そこで、今回はGitHubで複数アカウントを使用しており、各アカウント毎にリモートリポジトリへプッシュする方法を解説致します。

結論から言いますと、「SSH鍵」を使用して認証をクリアします。

①.sshディレクトリの作成

Windowsの場合

C:\Users\[ユーザ名] の直下に .ssh というディレクトリが存在するか確認して下さい。

なければ、.ssh というディレクトリを作成します。

# PowerShellの場合の .ssh ディレクトリ作成方法例
PS C:\Users\user> cd ~  # "cd ~" このコマンドでホームディレクトリをワーキングディレクトリにすることが出来ます。
PS C:\Users\user> mkdir .ssh

MACの場合

ホームディレクトリ(~)の下に.sshというディレクトリがあるか確認して下さい。

なければmkdirで作成します。

②各アカウントのSSH鍵を作成

.ssh ディレクトリをワーキングディレクトリにした状態で、下記コマンドを実行して各アカウント毎にSSH鍵を作成します。

まずは、メインアカウントのSSH鍵を作成します。

メインアカウントのSSH鍵作成
cd ~/.ssh
ssh-keygen -t rsa -C main@sample.com -f id_rsa

Enter passphrase (empty for no passphrase): と表示されたら Enterします。
Enter same passphrase again: と表示されたらもう一度 Enterします。これでSSH鍵が作成されます。

~/.ssh ディレクトリに “id_rsa” と “id_rsa.pug” のファイルが作成されています。

ls コマンドでディレクトリ内のファイルが一覧表示されますのでそちらで確認頂いても構いません。

次にサブアカウントのSSH鍵も同様に作成します。

サブアカウントのSSH鍵作成
cd ~/.ssh
ssh-keygen -t rsa -C sub@sample.com -f id_sub_rsa

③SSH設定ファイルの作成

~/.ssh/configファイル作成

~/.ssh ディレクトリに “config“ファイルを作成します。設定ファイルですので拡張子はありません。

~/.ssh/configファイル作成
cd ~/.ssh
New-Item config # WindowsPowershellの場合
touch config # MACの場合

~/.ssh/configファイル編集

上記で作成した”config“ファイルに各アカウントの設定内容を記述していきます。

~/.ssh/configファイル編集 ※各コードの解説は次項で説明。
#メインアカウント
Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes

#サブアカウント
Host github.com.sub
  HostName github.com
  IdentityFile ~/.ssh/id_sub_rsa
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes
※各コードの解説。解説内容を”config”ファイルに含めてしまうとエラーになるので注意。
#メインアカウント
Host github.com # 登録するメインアカウント。SSH接続の際に使用します。
  HostName github.com
  IdentityFile ~/.ssh/id_rsa # メインアカウント用SSH鍵の絶対パス(相対パスではエラーになる様子です。)
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes

#サブアカウント
Host github.com.sub # 登録するサブアカウント。SSH接続の際に使用します。
  HostName github.com
  IdentityFile ~/.ssh/id_sub_rsa # サブアカウント用SSH鍵の絶対パス(相対パスではエラーになる様子です。)
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes

④GitHubにSSH鍵を登録

GitHubの各アカウントに作成したSSH鍵を登録します。
まずは、メインアカウントから登録します。

Build software better, together
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over...

①右上のアカウントアイコンをクリック

②settingsをクリック

③SSH and GPC keysをクリック

④New SSH keyをクリック

⑤TitleとKeyの入力

Titleは任意の名称で大丈夫です。
Keyは、メインアカウントは「id_rsa.pub」のコードを入力します。

⑤SSH接続確認

メインアカウントのSSH接続テストをします。
~/.ssh/config ファイルで設定したアカウント名を使用します。

メインアカウントのSSH接続テスト
ssh -T git@github.com

ターミナルに下のようなメッセージが表示されたら接続成功です。

Hi [メインのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

次に、サブアカウントのSSH接続テストをします。

サブアカウントのSSH接続テスト
ssh -T git@github.com.sub

ターミナルに下のようなメッセージが表示されたら接続成功です。

Hi [サブのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

git clone / git add

git clone / git add
# メインアカウント
git clone git@github.com:username/repository.git
git remote add origin git@github.com:username/repository.git
# サブアカウント
git clone git@github.com.sub:username/repository.git
git remote add origin git@github.com.sub:username/repository.git

リモートURLを変更する場合

リモートURLを変更する場合
# メインアカウント
git remote set-url origin git@github.com:username/repository-name.git
# サブアカウント
git remote set-url origin git@github.com.sub:username/repository-name.git

git の user.name / user.emailの設定

リポジトリごとに名前とメールアドレスを設定します。

ここではグローバルには、メインの名前とメールアドレスを設定しておき、サブの場合はローカル側で設定します。

リモートURLを変更する場合
git config --global user.name [メインのユーザー名]
git config --global user.email [メインのメールアドレス]

cd path/to/repository
git config --local user.name [サブのユーザー名]
git config --local user.email [サブのメールアドレス]

git push origin main

最後にリモートリポジトリへプッシュします。

2020/10以降、Githubの仕様変更によりデフォルトのブランチ名が”master”→”main”に変更されました。

git push origin main
# ~/gitpractice(ワーキングディレクトリ)
git push origin main

コメント

タイトルとURLをコピーしました