Browse Month: July 2013

github で複数のアカウントを切り替えるときにはまった話

みんな大好き github で、複数のアカウントを切り替えたくてはまったお話。

メインアカウントの SSH 鍵を ~/.ssh/id_rsa でずっと使っていました。
そのあと、ある github.com 上にあるプライベートリポジトリに別のアカウントで切り替える必要がでてきました。
そこで、~/.ssh/config に、次のような設定を追加しました。

もちろん、事前に切り替える専用の SSH 鍵を作成しました。

$ ssh-keygen -t rsa -C "mail address" -f ~/.ssh/github/id_rsa


Host gh-hoge-naoya
HostName github.com
User git
IdentityFile ~/.ssh/github/id_rsa

この状態で ssh 経由でプライベートリポジトリを clone しようとしたわけですが、”Repository not found” となってしまいました。https 経由だと clone することができます。
状況とすると、上の hoge-naoya というユーザで github.com 上に登録されており、そのアカウントはプライベートリポジトリをもっています。

そこで gihtub.com にあるヘルプを参考にして、アカウント名を確認してみました。


$ ssh -T git@gh-hoge-naoya
Hi naoya! You've successfully authenticated, but GitHub does not provide shell access.

おや、アカウント名がおかしいです。naoya というアカウント名はプライベートリポジトリをもっていないアカウントです。.ssh/config にはちゃんと設定されています。次の詳細情報を表示してみました。

$ ssh -vT git@gh-hoge-naoya
...

詳細情報をみてみると、なんということでしょう。~/.ssh/id_rsa が送られているようです・・・。~/.ssh/id_rsa は、naoya というアカウント名に登録されていたので、この状態だとうまく切り替えることができないようです。

そこで、naoya というアカウント名も github 専用の SSH 鍵を作成して、.ssh/config に次のように追加しました。

Host gh
HostName github.com
User git
IdentityFile ~/.ssh/github/id_rsa

この状態で、確認してみると、バッチリ切り替わっていました。

$ ssh -T git@gh-hoge-naoya
Hi hoge-naoya! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@gh
Hi naoya! You've successfully authenticated, but GitHub does not provide shell access.

あとは、プライベートリポジトリを clone したあと、正しく名前とメールアドレスの変更を忘れないようにしたいですね。

$ git config user.name "Naoya Nakazawa"
$ git config user.email "naoya@example.jp"

あわせて、既存のリポジトリ名は、origin url を変更するのも忘れないようにしましょう。直接、.git/config を編集してもいいかと思います。

$ git remote set-url origin git@gh:naoya/test.git