ローカル環境からコマンドでリモートリポジトリへプッシュする際、デフォルトで登録しているユーザーでなければプッシュ出来なかった経験はないでしょうか?
管理人は、過去に使用していたユーザーアカウントとは別のアカウントのリモートリポジトリへプッシュを試みたところ、下記のエラーが発生しました。
どうも複数アカウントを使用していると起こりがちなエラーの様子です。
そこで、今回は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の入力
⑤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
コメント