見出し画像

githubで複数アカウントを使う時の設定

会社用と個人用のアカウントを、1台のPCから操作することを想定した設定方法。会社用:my_name@office.com、家用:my_name@home.comとする。

あと下記の実行は、PowerShellを使う前提。

sshのキーを複数アカウント分用意する

cd ~/.ssh
ssh-keygen -t rsa -C my_name@office.com -f id_rsa_office
ssh-keygen -t rsa -C my_name@home.com -f id_rsa_home

-Cの後にメールアドレス、-fの後にファイル名=鍵の名前。区別できる名前にする。これをやると、id_rsa_office、id_rsa_office.pub、id_rsa_home、id_rsa_home.pubの4つのファイルができる。

秘密鍵をssh-agentへ登録

ssh-add ~/.ssh/id_rsa_office
ssh-add ~/.ssh/id_rsa_home

↑これを実行すると、`Error connecting to agent: No such file or directory` というエラーが出ることがある。ssh-agentというサービスが止まっていることが原因。↓をやってサービスを立ち上げることで、実行できるようになる。

Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent

公開鍵をgithubへ登録

ブラウザでgithubを開いて、office用のアカウントでログイン。

「右上の自分のアイコン>Settings>SSH and GPG keys>New SSH keyボタン」で、SSHキーを登録。Titleはパソコン名とかを入れ、Keyはid_rsa_office.pubをエディタで開き、全部コピー&ペースト。

home用のアカウントも同様。

config編集

ローカルのsshキーが入っていたフォルダ(~/.ssh)へ戻り、configをエディタで開く。なければ作る。拡張子なし。

# office用設定
Host github.com.office  # <- point 1
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_office  # <- point 2
  TCPKeepAlive yes
  IdentitiesOnly yes

# home用設定
Host github.com.home  # <- point 1
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_home  # <- point 2
  TCPKeepAlive yes
  IdentitiesOnly yes

office用とhome用で違いは2点。
1. Hostところ(接続名)
2. rsaファイルのパス

このファイルは、SSH接続をする際に使用するもの。gitコマンドは、内部的にgithubに対してSSH接続をして色々を送るので、必要な設定。内容は、Hostの行の「github.com.office」という名前で接続したら、HostName(接続先)はgithub.comで、Userはgitで、〜〜〜という接続情報のセットがまとめられているもの。上記の例では、「github.com.office」と「github.com.home」の2セットをあらかじめ用意しておいたことになる。

ちなみに「# <- point」があると問題を起こすので、実際は消すこと。

接続確認

ssh -T github.com.office
ssh -T github.com.home

"Hi xxxxxxxxx! You've successfully authenticated, but GitHub does not provide shell access." 
というメッセージが出れば良い。が、xxxxxxxxx部は、それぞれの接続によって、それぞれのアカウントで 接続されていることが大事なので、そこに注意。意図したアカウントになっていない場合は、秘密鍵をssh-agentへ登録していないか、config編集をミスっていると思われる。(自分の場合は前者でだいぶつまづいた)

なお初めて接続するところは、`知らないところだけど大丈夫?(yes/no)` と聞かれるので、yesとすればOK。

git remoteの設定

githubでリポジトリを作った時に出てくるサンプルコードそのままだとダメで、git remoteの行を一部修正する。

office用の場合の例

git remote add origin github.com.office:my_office_account/my_office_repository.git

ポイントは2つ。originの後の部分。
1. :の前の部分が、configで書いたHostの名前(=接続名)
2. :以降は、githubのプロジェクトの所有者と.gitファイルへのパス。github上で、「Clone or download」の緑のボタンを押すと出ている。ただしそこには、:の前の文字が「git@github.com:」となっているので、:の後ろだけ使う。

---------------------------

超絶躓いたので追記。

add とか commit とか操作するユーザーと、githubへ接続するユーザーは、違っていてもできてしまう!上記のconfigファイルの編集などは、接続するユーザーです。

操作するユーザーを下記コマンドで確認し、切り替えておくことを忘れずに!!デフォルトはglobalのユーザーになってますよ。

git config user.name
git config user.email

git remote addで指定してるのはAなのに、githubで見るとBが更新したって言われる、ということになります。数時間、Repositoryを作ったり消したり、試行錯誤してました。気づけばなんてことないやつでした。。。

以上ですー

この記事が気に入ったらサポートをしてみませんか?