GitHub で複数アカウントを使った場合に、SSH の鍵管理周りではまったので解決方法のメモです。

Special Thanks @bongole

GitHub で複数アカウントを使う

GitHub で複数アカウントを利用するときの設定です。

GitHub は、アカウントと紐付けて SSH の鍵を管理します。なので、複数アカウントを利用すると同じ SSH の鍵を使えません。

そこで、複数アカウントの SSH の鍵の管理をする方法のメモです。

この記事で別アカウントとして作成するアカウントは mountposition とします。記事中に出てくる mountposition という文字は適宜ご自分の別アカウントのIDに変更してください。

git の SSH の動き

git で push を行うと、デフォルトで ~/.ssh/id_rsa 秘密鍵が利用されます。

デフォルトのファイル名以外の秘密鍵を使いたい場合には、 ~/.ssh/config ファイルを設定します。

~/.ssh/config

Host github.com
 User git
 Port 22
 Hostname github.com
 IdentityFile ~/.ssh/github_id_rsa
 TCPKeepAlive yes
 IdentitiesOnly yes 

IdentityFile で指定した鍵ファイルが github.com への接続で使われるようになります。

GitHub の別アカウント用の SSH 鍵を用意する

ssh-keygen を利用して、別アカウント用の秘密鍵を作成します。作った秘密鍵と対になる公開鍵を GitHub に登録します。

その後、~/.ssh/config に次の部分を追加します。

~/.ssh/config 追記

# Client user (mountposition)
Host github-mountposition
  HostName github.com
  User git
  IdentityFile ~/.ssh/github_mountposition_rsa

github-mountposition というホストへの SSH 接続には ~/.ssh/github_mountposition_rsa 鍵ファイルを使うという設定です。

github-mountposition というのは、この後 git remote add で設定する GitHub 上の別アカウントが所有するリポジトリのホストです。

GitHub ではアカウントごとのリポジトリへ、 git@github-{client名} でつなぐことができるようです。

git remote add で GitHub 上のリポジトリにアクセスできるようにする

git remote add を使って GitHub 上のリポジトリへアクセスできるようにします。このとき、通常は [email protected]:{リポジトリのURL} とするところを、git@github-{アカウント名}:{リポジトリのURL} に変更していることに注意してください。

$ git remote add origin git@github-mountposition:{リポジトリのURL}

GitHub は SSH でつなぐ先を通常の github.com とは別に、github-{アカウント名} でもアクセスできるようになっています。この github-{アカウント名} という形式を用いて git から SSH で接続することによって、~/.ssh/config の HOST の設定を切り分けられるようにしています。

~/.ssh/config の IdentityFile を複数書くことで対応する?

いろいろなところで、~/.ssh/config ファイルの IdentityFile は複数書くことができるとあったのですが、実際にやってみるとうまくいきませんでした。

Special Thanks

Special Thanks @bongole