Git
GitHub
SSH
Config
認証

githubの複数アカウントの扱い方

More than 3 years have passed since last update.

githubのアカウントを複数持っていて、意図と違うアカウントにpushされちゃってpermission deniedとかになって地味に解消するのに手間取ったので、今後そうならないようにメモっておきます。

陥った現象

個人のアカウントとチームのアカウントを二つ持っていて、とあるアプリケーションをlocalで開発後、githubの個人アカウントにpushしようと思ったら、チームの方にpushされてpermission deniedとかになってしまってpushができない。。。

~/.ssh/configとかAPP_ROOT/.git/configとかを色々いじってみて、ようやく解消したので、そのプロセスをメモしておきます。

githubにsshで接続するために下記を実行

ssh -T git@github.com

すると、認証が完了したときのメッセージが、

Hi {チームのアカウント名}/{APP名}! You've successfully authenticated, but GitHub does not provide shell access.

ここで気づくべきだけど、認証した!と思って、意気揚々とgit pushまでしようとすると、push先がチームのアカウントなのでpermissionがないよと。

対処法

git remoteの先を確認。

git remote -v

=> origin   git@github.com:{個人のアカウント名}/{APP名}.git (fetch)
   origin   git@github.com:{個人のアカウント名}/{APP名}.git (push)

となる。

さっき接続したgithub.comでは、チームのアカウントがpush先になってしまうので、
remoteを書き換える。

vi ~/.ssh/config

に以下の記述を追加する

Host github-mine
  HostName github.com
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes
  IdentityFile ~/.ssh/{秘密鍵の名前}

で、

git remote remove origin
git remote add origin git@github-mine:{個人のアカウント名}/{APP名}.git

とやると、

git remote -v

=> origin   git@github-mine:{個人のアカウント名}/{APP名}.git (fetch)
   origin   git@github-mine:{個人のアカウント名}/{APP名}.git (push)

ってなるので、これでOK!!

git pushが通りましたとさ。

めでたし、めでたし。