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