読者です 読者をやめる 読者になる 読者になる

いぇいいぇい

ASP.NET、PHPを中心に書いています

複数のGitHubデプロイキーを同じマシンで使う方法

GitHubでは、デプロイキーは1つのリポジトリにのみ関連付けられます。ですので、通常はリポジトリ毎に異なるSSHキーを作成してデプロイキーとします。

ここで困るのが、同じマシンで複数のリポジトリをデプロイしたい場合です。例えば複数サービスを同じVPSに共存させる場合や、同じサービスだけど複数のリポジトリがある、という場合などです。

GitHubの場合、ホスト名とSSHキーを関連付けるために~/.ssh/configで以下のように指定しますが、単純に複数個指定してもうまくいきません。

Host github.com
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_proj1
Host github.com
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_proj2
> git clone git@github.com:tsu1980/proj2.git
ERROR: Repository not found.
fatal: The remote end hung up unexpectedly

同一マシンで複数デプロイキーを共存させる方法

そこで、以下のようにHostの値を分けて定義し、Git URLも同じ値を指定してやるとうまく動きます。

Host github.com-proj1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_proj1
Host github.com-proj2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_proj2
> git clone git@github.com-proj2:tsu1980/proj2.git
Initialized empty Git repository in /var/projects/proj2/.git/
remote: Counting objects: 833, done.
remote: Compressing objects: 100% (480/480), done.
remote: Total 833 (delta 400), reused 748 (delta 315), pack-reused 0
Receiving objects: 100% (833/833), 800.30 KiB | 523 KiB/s, done.
Resolving deltas: 100% (400/400), done.

Hostの値とGit URLのホスト名部分を一致させることがポイントです。この例ではgithub.com-proj2の部分になります。

cloneではなく既存リポジトリのURLを変更するにはgit remote set-urlを使ってください。

参考

Managing deploy keys | GitHub Developer Guide

superuser.com